MVC 属性路由问题
MVC attribute routing issues
我像这样装饰一个动作(在我的家庭控制器中):
[Route("view-book")]
public ActionResult ViewBook(int? id1, string id2)
在我看来,我使用 javascript:
填充一些超链接
tbody = tbody + '<a href="@Url.Action("ViewBook", "Home")/' + item.Id + '/' + item.Slug + '">View Book</a>';
使用上面的代码,超链接的 URL 可以正确呈现。例如:
https://localhost:44306/view-book/1/this-book
但是,ActionResult 没有被命中。所以,我将路由装饰更改为:
[Route("view-book/{id1:int?}/{id2}")]
public ActionResult ViewBook(int? id1, string id2)
现在 URL 呈现不正确,如下所示:
https://localhost:44306/Home/ViewBook/1/this-prop
但是,如果我像上面那样手动将 URL 更改为正确的 URL:
https://localhost:44306/view-book/1/this-prop
然后 ActionResult 被命中!
我该如何解决这个问题?
您可以在操作中使用多条路线。
[HttpGet]
[Route("view-book")] // Matches GET view-book
[Route("view-book/{id1:int?}/{id2}")] //Matches GET view-book/1/slug
public ActionResult ViewBook(int? id1, string id2) { ... }
这样,当您在 javascript 中构建路由时,第一条路由现在应该允许您之前呈现正确的 URL,因为 @Url.Action("ViewBook", "Home")
应该解析为 view-book
,第二条路线将允许调用操作。
我像这样装饰一个动作(在我的家庭控制器中):
[Route("view-book")]
public ActionResult ViewBook(int? id1, string id2)
在我看来,我使用 javascript:
填充一些超链接tbody = tbody + '<a href="@Url.Action("ViewBook", "Home")/' + item.Id + '/' + item.Slug + '">View Book</a>';
使用上面的代码,超链接的 URL 可以正确呈现。例如:
https://localhost:44306/view-book/1/this-book
但是,ActionResult 没有被命中。所以,我将路由装饰更改为:
[Route("view-book/{id1:int?}/{id2}")]
public ActionResult ViewBook(int? id1, string id2)
现在 URL 呈现不正确,如下所示:
https://localhost:44306/Home/ViewBook/1/this-prop
但是,如果我像上面那样手动将 URL 更改为正确的 URL:
https://localhost:44306/view-book/1/this-prop
然后 ActionResult 被命中!
我该如何解决这个问题?
您可以在操作中使用多条路线。
[HttpGet]
[Route("view-book")] // Matches GET view-book
[Route("view-book/{id1:int?}/{id2}")] //Matches GET view-book/1/slug
public ActionResult ViewBook(int? id1, string id2) { ... }
这样,当您在 javascript 中构建路由时,第一条路由现在应该允许您之前呈现正确的 URL,因为 @Url.Action("ViewBook", "Home")
应该解析为 view-book
,第二条路线将允许调用操作。