如何在ASP.NET MVC中创建自定义路由处理程序?ASP.NET MVC,操作URL结构
回答
ASP.NET MVC可以很容易地在Global.asax.cs中创建一个自定义路由处理:
routes.MapRoute(
"Default",
"{controller}.aspx/{action}/{id}",
new { action = "Index", id = "" }
).RouteHandler = new SubDomainMvcRouteHandler();
这将导致所有请求由指定的自定义RouteHandler被处理。对于这个特殊的处理程序:
public class SubDomainMvcRouteHandler : MvcRouteHandler
{
protected override IHttpHandler GetHttpHandler(System.Web.Routing.RequestContext requestContext)
{
return new SubDomainMvcHandler(requestContext);
}
}
那么你可以做任何你想要的,在这种情况下,SubDomainMvcHandler从URL抓取的子域名并将其传递给控制器的特性:
public class SubDomainMvcHandler : MvcHandler
{
public SubDomainMvcHandler(RequestContext requestContext) : base(requestContext)
{
}
protected override void ProcessRequest(HttpContextBase httpContext)
{
// Identify the subdomain and add it to the route data as the account name
string[] hostNameParts = httpContext.Request.Url.Host.Split('.');
if (hostNameParts.Length == 3 && hostNameParts[0] != "www")
{
RequestContext.RouteData.Values.Add("accountName", hostNameParts[0]);
}
base.ProcessRequest(httpContext);
}
}
完美。谢谢杰森!出于兴趣,感谢SO的解决方案的一般方法是什么?评论或其他方式? – 2009-04-17 11:23:30
我认为在这样的同行评审社区中,“感谢”已经足够;-) – Jason 2009-05-08 19:46:34
因此,它将成为控制器方法中的一个属性? – 2011-10-03 15:15:58
- 1. ASP.NET MVC - URL操作路径
- 2. Asp.Net MVC后操作结果
- 3. Asp.net MVC URL和目录结构
- 4. ASP.NET MVC虚拟操作结果
- 5. ASP.NET MVC Ajax的操作结果包围
- 6. ASP.NET MVC Web结构
- 7. 操作在ASP.NET MVC
- 8. ASP.net MVC项目结构
- 9. ASP.NET MVC路由和结构
- 10. ASP.Net MVC查看结构
- 11. ASP.NET MVC 3路由结构
- 12. ASP.NET MVC体系结构
- 13. ASP.NET MVC与DDD结构
- 14. ASP.NET MVC 3文件结构
- 15. ASP.NET MVC 5 EF6结构
- 16. ASP.NET MVC RESTFul体系结构
- 17. ASP.NET MVC体系结构
- 18. ASP.Net url路由结构
- 19. ASP.Net MVC动作链接/ Url为javascript表操作 - datatable.net
- 20. 字符串操作(ASP.NET MVC)
- 21. ASP.NET MVC的操作方法
- 22. ASP.NET MVC编辑操作?
- 23. ASP.NET MVC定时操作
- 24. ASP.NET MVC操作+扩展
- 25. Asp.Net mvc嵌套操作HTTPPOST
- 26. ASP.net MVC window.open URL不工作
- 27. 结构引用操作(操作符 - >)
- 28. 带有非标准url结构的ASP.NET MVC路由
- 29. ASP.NET Web API操作结果
- 30. Asp.Net MVC不会在url中显示索引操作
是什么你试图达到?你需要更具体一点 – 2009-04-16 10:55:54
嗨安德鲁,我已经重写了我的问题,我希望更具体。为评论欢呼。杰米 – 2009-04-16 21:26:51