我误解了简单/基本ASPNET-Core 2 MVC Web App的默认路由。
我试图在我的ASPNET-Core 2网站上进行简单的HTTP发布,但是我得到了意想不到的响应状态。
Sample code all found in a GitHub Repo我很快就推了推。
我试图创建以下路线:
HTTP POST /test
返回201 CREATED
。
我在Setup
课程中设置了以下路线:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
现在,当我在Postman中执行HTTP POST
时会出现以下结果:
Route | Result | Expectation
/test | 404 | 201
/test/post | 201 | 404
/ | 200 | 404 Da Faq?? (this is because the HomeController INDEX method
handled this)
当我将HTTP张贴到201
时,我期待/test/post
。
代码:
TestController.cs
public class TestController : Controller
{
[HttpPost]
public IActionResult Post(FakeVehicle fakeVehicle) { .. }
}
那就是说,当我用[Route("test")\]
属性装饰控制器时,我开始得到不同的结果......
TestController.cs
[Route("test")]
public class TestController : Controller
{
[HttpPost]
public IActionResult Post(FakeVehicle fakeVehicle) { .. }
}
和我尝试的路线:
Route | Result | Expectation
/test | 201 | 201 YAY!
/test/post | 404 | 404 YAY!
/ | 200 | 404 Da Faq?? (this is because the HomeController INDEX method
handled this)
如果我将Startup
课程更改为以下内容:
app.UseMvc();
我没有提供任何默认路由规则,我现在得到以下内容:
没有装饰[Route]
属性:
Route | Result | Expectation
/test | 201 | 404
/test/post | 404 | 404
/ | 404 | 404
装饰[Route]
属性:
Route | Result | Expectation
/test | 201 | 201
/test/post | 404 | 404
/ | 404 | 404
最后一个是最准确的。那么为什么默认路线图会让事情变得奇怪呢?