MVC属性路由控制器问题

时间:2016-01-04 07:39:28

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

我有一个使用属性路由的网址https://localhost/api/Books/{value},但每当我将{value}作为null或空字符串传递时,WEB API无法将其路由到所需的控制器?如何解决此问题并解决它。错误消息的详细信息是:控制器上没有找到任何操作' Books'与请求匹配。"

2 个答案:

答案 0 :(得分:0)

假设您已注册默认路线,请求...

http://localhost/api/books/34

将由followung控制器/动作处理,甚至不使用属性路由......

public BooksController : ApiController
{
    public IHttpActionResult Get(int id){...}
}

但是,如果您需要属性路由,则使用以下属性装饰您的操作方法...

[HttpGet, Route("api/books/{id}")]
public IHttpActionResult Get(int id){...}

答案 1 :(得分:0)

您可以通过向路由参数添加问号来使URI参数可选。如果route参数是可选的,则必须为method参数定义默认值。

public class BooksController : ApiController
{
    [Route("api/books/locale/{lcid:int?}")]
    public IEnumerable<Book> GetBooksByLocale(int lcid = 1033) { ... }
}

参考:http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2#optional

或者更好的方法(如果在您的方案中有效)将有2条不同的路线:

[Route("api/books/{id}")]
public BooksController : ApiController
{
    public IHttpActionResult Get(int id){...}
}
[Route("api/books")]
public BooksController : ApiController
{
    public IHttpActionResult Get(){...}
}