gpt4 book ai didi

c# - 路由参数在 WebApi 中不起作用

转载 作者:行者123 更新时间:2023-11-30 12:56:09 25 4
gpt4 key购买 nike

下面是 WebAPI。

[RoutePrefix("api/customer")]
public class CustomerController : ApiController
{
[Route("{id:int:min(1)}/")]
public HttpResponseMessage Get(int id)
{
//my stuff
}
}

如果我传递任何小于 1 的值(比如 0 或 -1)。它以 HttpStatusCode = 200

返回响应主体为 NULl

预期的响应是:HttpStatus Code = 404。

但是,如果我按如下方式修改我的路线。

 [RoutePrefix("api/customer")]
public class CustomerController : ApiController
{
[Route("detail/{id:int:min(1)}/")]
public HttpResponseMessage Get(int id)
{
//my stuff
}
}

现在,如果我传递小于 1 的值,我会得到预期的响应,即 404。

http://localhost:8080/api/customer/detail/-1 returns - 404.(Desired response).

http://localhost:8080/api/customer/-1 returns - Null.(Not correct).

是什么原因造成的?我该如何解决?

非常感谢任何帮助/建议。

最佳答案

你应该删除

       config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional });

来自您的 WebApi.Config 路由。发生的情况是路由/api/customers/-1 不符合属性路由,因为它不符合约束条件。然而,这不会阻止它寻找其他匹配的路线。

如果您只使用属性路由,您会得到 404,但是,在该路由失败后,框架会继续寻找它在您的“DefaultApi”路由中找到的可行路由。因此,它使用 customers 作为 {controller},使用 -1 作为 {id},并将其传递给您的 Get 方法。

关于c# - 路由参数在 WebApi 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43208484/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com