添加属性路由会中断基于配置的路由(.NET MVC5)

时间:2016-05-09 21:48:39

标签: asp.net asp.net-mvc routes asp.net-mvc-routing

因此,我们正在将项目从Web表单更新为.NET MVC。为了支持深入链接到我们的应用程序的其他应用程序,我尝试将属性路由添加到模仿旧Web表单路径的相关控制器操作。

我在Home控制器上有一个事件动作。配置具有删除控制器名称的路由。

routes.MapRoute(
    name: "eventdetails_nohome",
    url: "event/{id}/{occurrenceid}",
    defaults: new { Controller = "Home", action = "Event", occurrenceid = UrlParameter.Optional },
    constraints: new { id = @"\d+", occurrenceid = @"\d+" }
);

该路线适用于http://myapp/event/123/456等路线,并且http://myapp/home/event?id=123&occurrenceid=456等默认路由也有效。

到目前为止一切顺利,但如果我将此路线属性添加到操作中:

[Route("~/ViewEvent.aspx")]
public ActionResult Event(int id, int occurrenceid)

然后唯一有效的路线是http://myapp/ViewEvent.aspx?id=91918&occurrenceid=165045。开始返回之前工作的路线

  

' /'中的服务器错误应用

     

无法找到资源。

     

描述:HTTP 404.您正在查找的资源(或其中一个依赖项)可能已被删除,名称已更改或暂时不可用。请查看以下网址,确保拼写正确。

     

请求的网址:/ event / 123/456

我已使用the routedebugger扩展程序,我可以验证即使使用属性路由,我的旧路由仍然是第一个工作。那么为什么我会得到资源?#34;资源无法找到"错误?

注意:作为一种解决方法,我发现我可以执行传统的路由配置,例如

routes.MapRoute(
    name: "Legacy event",
    url: "ViewEvent.aspx",
    defaults: new { Controller = "Home", action = "Event" }
);

我仍然很好奇为什么属性路线会破坏现有路线,因为我认为你应该可以同时使用两者。

1 个答案:

答案 0 :(得分:2)

查看Attribute Routing in ASP.NET MVC 5

另一篇标题相同的文章

Attribute Routing in ASP.NET MVC 5

属性路由会覆盖基于约定的路由。如果您使用多个URL进行操作,则可以在操作中使用多个路由属性...

    [Route("event/{id:int}/{occurrenceid:int}")]
    [Route("event")]
    [Route("~/ViewEvent.aspx")]
    public ActionResult Event(int id = 0, int occurrenceid = 0) {
        return View();
    }

以下网址全部路由到上述操作。

http://myapp/event/123/456
http://myapp/home/event?id=123&occurrenceid=456
http://myapp/ViewEvent.aspx?id=91918&occurrenceid=165045