FormatAttribute需要正斜杠以执行不带参数的操作

时间:2019-04-08 06:48:17

标签: asp.net-web-api asp.net-core routes asp.net-routing

我有一个不带参数的GET方法,希望下面可以正常工作

  

/api/books.xml

但是,这可以使用正斜杠

  

/api/books/.xml

[Route("api/[controller]")]
[ApiController]
public class BooksController : ControllerBase
{
    [HttpGet]
    [Route(".{format}")]
    [FormatFilter]
    public ActionResult<List<Book>> Get()
    {
        return bookService.Get();
    }
}

我尝试过的可能解决方案是

  1. 不带{id}

    的注释
    [Route("[controller]/[action].{format}")] // no slash between [action] and .{format}
    
  2. 在不带{id}的Startup.cs中添加默认路由,这样,如果像这样的问题那样未传递id参数,则该路由不应在{action}之后出现斜线。

    app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller}/{action=Index}");
        });
    

1 个答案:

答案 0 :(得分:0)

基于控制器上当前定义的路由,您所描述的是设计使然。

考虑更改路由以匹配所需的URL格式

[ApiController]
public class BooksController : ControllerBase {        
    [HttpGet]
    [Route("api/[controller].{format}")] //<--- GET api/books.xml
    [FormatFilter]
    public ActionResult<List<Book>> Get() {
        return bookService.Get();
    }
}