Chr*_*att 5 asp.net-core asp.net-core-2.0
我的控制器看起来像:
[FormatFilter]
[Route("api/foo")]
public class FooController : Controller
{
[HttpPost("")]
public IActionResult Foo()
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
我要添加一个可选的格式扩展名,如此处所述。但是,我希望路由以`/api/foo.json'结尾。以下操作失败,返回所有版本404。
[HttpPost(".{format?}"]
Run Code Online (Sandbox Code Playgroud)
我的下一个想法是在做类似的事情:
[HttpPost("foo.{format?}")]
Run Code Online (Sandbox Code Playgroud)
有效地将控制器范围的路线的那部分移动到动作上。但是,这将引发500,并显示错误:
错误:在段'foo。{format?}'中,可选参数'format'前面是无效的段'foo。'。在可选参数之前只能有一个句点(。)。
显然,这唯一的意志的工作是沿着线的东西:
[HttpPost("{id}.{format?}"]
Run Code Online (Sandbox Code Playgroud)
换句话说,似乎可选的格式参数必须始终跟随另一个参数才能起作用,这对我来说似乎是绝对骨头的限制。我在这里想念什么吗?有什么想法可以像这样的静态路由使它起作用吗?
Easy peasy *(经过大量试验和错误)
[FormatFilter]
[HttpPost("foo"), HttpPost("foo.{format}")]
public class FooController : Controller
{
[HttpPost("")]
public IActionResult Foo()
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
或者
[FormatFilter]
[HttpPost, Route("foo"), Route("foo.{format}")]
public class FooController : Controller
{
[HttpPost("")]
public IActionResult Foo()
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
*提示:
显然,我放弃得太早了,尽管这肯定是我想到过的最荒谬的解决方案之一。
[HttpPost("~/api/{foo=foo}.{format?}")]
Run Code Online (Sandbox Code Playgroud)
本质上,我只是创建一个虚拟参数,我的操作实际上并不采用我想要的路径片段的默认值。这满足了可选格式参数遵循另一个参数的要求,同时仍然允许我静态设置我的路线。
第一部分 ( ~/api/) 只是指定路径部分的一种方式,而无需更改我的控制器范围的路由。api/foo/换句话说,任何其他操作仍然以 为前缀。
我想,无论什么有效。
| 归档时间: |
|
| 查看次数: |
618 次 |
| 最近记录: |