我正在尝试为我的 ASP.NET MVC 5 项目设置一些路由。
- 我定义了自定义路由来获得不错的博客文章永久链接——这些似乎工作正常
- 我添加了一个 XmlRpc 处理程序(类似于在Mads 的 Miniblog和Scott 的帖子中的处理方式)
现在我有一些奇怪的行为:
/Home/About
路由正确/Home/Index
被路由到/XmlRpc?action=Index&controller=Blog
/HOme/Index
有效(是的,我发现这是由于拼写错误)——我一直认为路线不区分大小写?- 使用
Url.Action("Foo","Bar")
也会创建/XmlRpc?action=Foo&controller=Bar
这是我的RouteConfig
文件:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.Add("XmlRpc", new Route("XmlRpc", new MetaWeblogRouteHandler()));
routes.MapRoute("Post", "Post/{year}/{month}/{day}/{id}", new {controller = "Blog", action = "Post"}, new {year = @"\d{4,4}", month = @"\d{1,2}", day = @"\d{1,2}", id = @"(\w+-?)*"});
routes.MapRoute("Posts on Day", "Post/{year}/{month}/{day}", new {controller = "Blog", action = "PostsOnDay"}, new {year = @"\d{4,4}", month = @"\d{1,2}", day = @"\d{1,2}"});
routes.MapRoute("Posts in Month", "Post/{year}/{month}", new {controller = "Blog", action = "PostsInMonth"}, new {year = @"\d{4,4}", month = @"\d{1,2"});
routes.MapRoute("Posts in Year", "Post/{year}", new {controller = "Blog", action = "PostsInYear"}, new {year = @"\d{4,4}"});
routes.MapRoute("Post List Pages", "Page/{page}", new {controller = "Blog", action = "Index"}, new {page = @"\d{1,6}"});
routes.MapRoute("Posts by Tag", "Tag/{tag}", new {controller = "Blog", action = "PostsByTag"}, new {id = @"(\w+-?)*"});
routes.MapRoute("Posts by Category", "Category/{category}", new {controller = "Blog", action = "PostsByCategory"}, new {id = @"(\w+-?)*"});
routes.MapRoute("Default", "{controller}/{action}/{id}", new {controller = "Blog", action = "Index", id = UrlParameter.Optional});
}
这就是 的定义MetaWeblogRouteHandler
:
public class MetaWeblogRouteHandler : IRouteHandler
{
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
return new MetaWeblog();
}
}
基本上我想要通常的 ASP.NET MVC 路由行为 (/controller/action) + 我为永久链接定义的自定义路由 + 通过 XmlRpc 处理程序仅在 /XmlRpc 处理 XML-RPC。
由于参数与路由中定义的参数相同,Default
我尝试删除路由,但没有成功。
有任何想法吗?
更新:
调用时/Home/Index
设置AppRelativeCurrentExecutionFilePath
为合法"~/XmlRpc"
选择XmlRpc 路由。请求似乎有什么问题?
更新 2 :除了一种情况外,问题都解决了:当通过 Visual Studio 启动 IE 进行调试时,它仍然失败。在其他所有情况下,它现在都可以工作(是的,我检查了浏览器缓存,甚至在另一台机器上尝试过,以确保;IE 从 VS = 失败开始,所有其他组合都很好)。无论如何,因为它现在适用于最终用户,所以我暂时感到满意;)