2016-01-04 130 views
0

我有一个URL https://localhost/api/Books/{value}使用属性路由,但每当我通过{value}作为null或空字符串的WEB API不能将它路由到所需的控制器?如何解决此问题并解决它。错误消息的详细信息是:在控制器“书籍”上找不到与请求匹配的操作。“MVC属性路由控制器问题

回答

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){...} 
+0

但由于某些原因,我需要的属性路由看过来,那么现在该怎么办? –

0

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

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(){...} 
}