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

标签 c# validation asp.net-web-api routevalues

下面是 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/

相关文章:

javascript - 即使正在检查其中一个 radio ,表单仍然返回 false

asp.net-web-api - 如何从 WEB API 响应中删除命名空间

c# - 此请求的授权已被拒绝 - 新的 Web API 项目

c# - 服务器-客户端推/拉连接如何工作?

javascript - 当用户转到下一个元素时如何验证表单?

javascript - 我需要在 onclick 上运行两个函数。即使嵌套在一起,我也无法让它们一起工作

c# - JSON 中的 23,908 个对象 我尝试在将属性添加到 SQL 数据库之前将它们添加到属性中

c# - 如何使用 Linq 从一系列的 3 个表中进行选择?

c# - 以管理员身份运行 Visual Studio 看不到映射的网络驱动器

c# - 启动 Bing map 时应使用哪个 API