尝试HTTP POST到简单的ASPNET Core 2网站时,找不到操作方法

时间:2018-03-15 04:25:48

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

摘要

我误解了简单/基本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?}");
});

尝试#1

现在,当我在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) { .. }
}

尝试#2

那就是说,当我用[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

最后一个是最准确的。那么为什么默认路线图会让事情变得奇怪呢?

0 个答案:

没有答案