1 回答
TA贡献1805条经验 获得超10个赞
由于参数名称不匹配,urlwebsite.com/Home/K/something会导致操作方法中的null参数值。 该方法通过 route 提供服务,该 route 声明了一个名称为(via )的参数,而 action 方法有一个名为 的参数。nameKActionResult K(string name)
Defaultid{controller}/{action}/{id}Kname
您可以通过否决操作方法上的参数名称来解决此问题,以便BindAttribute两者匹配。
ActionResult K([Bind(Prefix ="id")] string name)
要从到重定向,website.com/K/{name}您website.com/Home/K/{name}可以设置一个自定义IRouteHandler来处理此重定向。
注册一个处理任何与路由匹配的请求的路由K/{id},并将这些请求重定向到具有众所周知名称的路由(此处:)K。
由于讨论的参数名称不匹配,我们将在路由中使用{id}instead of 。{name}
routes.Add(new Route("K/{id}", new RedirectRouteHandler("K")));
K如下定义这条路线。
routes.MapRoute(
name: "K",
url: "Home/K/{id}",
defaults: new { controller = "Home", action = "K", id = UrlParameter.Optional }
);
并RouteHandler进行RedirectHandler重定向。
该类HttpResponse有一个RedirectToRoute方法可以处理路由名称和路由值,而无需我们自己构建 url。
class RedirectRouteHandler : IRouteHandler
{
private readonly string _routeName;
public RedirectRouteHandler(string routeName)
{
_routeName = routeName;
}
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
return new RedirectHandler(this._routeName, requestContext.RouteData.Values);
}
}
class RedirectHandler : IHttpHandler
{
private readonly string _routeName;
private readonly RouteValueDictionary _routeValues;
public RedirectHandler(string routeName, RouteValueDictionary routeValues)
{
this._routeName = routeName;
this._routeValues = routeValues;
}
public bool IsReusable { return false; }
public void ProcessRequest(HttpContext context)
{
context.Response.RedirectToRoute(this._routeName, this._routeValues);
}
}
请注意,注册路线的顺序很重要;RegisterRoutes好像。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.Add(new Route("K/{id}", new RedirectRouteHandler("K")));
routes.MapRoute(
name: "K",
url: "Home/K/{id}",
defaults: new { controller = "Home", action = "K", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
- 1 回答
- 0 关注
- 131 浏览
添加回答
举报