使用库AttributeRouting,我能够配置属性路由以使用自定义路由处理程序(继承MvcRouteHandler):
routes.MapAttributeRoutes(cfg =>
{
cfg.UseRouteHandler(() => new MultiCultureMvcRouteHandler());
}
);
Run Code Online (Sandbox Code Playgroud)
此外,在 MVC5 之前,可以更改任何现有路由的路由处理程序:
(routes["myroute"] as Route).RouteHandler = new MyCustomRouteHandler();
Run Code Online (Sandbox Code Playgroud)
对于使用属性路由的 MVC5,路由集合包含内部类(RouteCollectionRoute例如)并且似乎不可能更改路由的RouteHandler属性。
如何更改在 MVC5.1 中使用属性路由时使用的默认路由处理程序?
asp.net-mvc mvcroutehandler ihttphandler attributerouting asp.net-mvc-5.1
我写了一个自定义路由处理程序.因为我的网站中的区域中存在冲突的控制器名称,所以我收到错误:找到了多个匹配控制器命名的类型...
我想我需要在我的处理程序中指定一个命名空间,对吧?
我尝试了以下,没有一个工作:
public class MyRouteHandler : MvcRouteHandler
{
protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
{
(... complicated DB lookups and "re-writing" of requestContext.RouteData.Values["controller"] ...)
// doesn't work
requestContext.RouteData.Values["namespaces"] = new[] { "Site.Contollers" };
// doesn't work
requestContext.RouteData.DataTokens.Add("namespaces", new[] { "Site.Contollers" });
// doesn't work
requestContext.RouteData.Values["namespaces"] = "Site.Contollers";
// doesn't work
requestContext.RouteData.DataTokens.Add("namespaces", "Site.Contollers");
(... snip ...)
return base.GetHttpHandler(requestContext);
}
}
Run Code Online (Sandbox Code Playgroud)
什么是正确的方法?
注意:因为我的处理程序执行数据库查找并根据结果选择不同的控制器,所以我不能在我的Global.asax.cs文件中使用基本的MapRoute()方法(据我所知).
asp.net-mvc namespaces mvcroutehandler asp.net-mvc-routing asp.net-mvc-areas
让我留下来为我的应用程序的单个用户存储内容:
这些文件可能是这样的:
最终用户应该看到一个"友好"的网址.
http:// domain.com/files/{GUID}/bunny.jpg
该URL必须以某种方式通过控制器或httpmodule或thingIdontknow才能被授权查看该文件.这些权限可能每天都在变化,因此需要经常检查文件的权限.
从我读过的内容来看,这完全是可能的,但我不确定接下来要编码什么,或者有人在这里有任何见解.HttpModule还是Controller?我很困惑需要发生什么.
asp.net-mvc mvcroutehandler httpmodule asp.net-mvc-routing asp.net-mvc-3