解析路由时ASP.NET中的奇怪行为

时间:2017-10-31 09:24:32

标签: c# asp.net asp.net-core

在Controller中给出此方法

[HttpGet("{id}")]
public string Get(int id)
{
    return "value";
}

这样的请求是成功的! http://localhost:53351/api/values/ ABC

为什么?

恕我直言,这应该是错误请求,因为id不是数字(它是“abc”)。相反,我得到一个0(零)作为id参数。

MOREOVER =>

在这样的方法中也会出现类似的问题:

[HttpGet("{id}")]
public string Get(int id, [FromQuery]QueryObject queryObj)
{
    return "value";
}

public class QueryObject
{
    public int Number { get; set; }
    public string String { get; set; }
}

在这样的请求中 http://localhost:53351/api/values/1?String=hello&Number= ABC 解析并放置为queryObj的对象将其number属性设置为0(零)。

这会使无效数据通过管道!我们可以避免这种行为吗?

1 个答案:

答案 0 :(得分:2)

您可以限制参数的类型,如下所示:

[HttpGet("{id:int}")]

来自docs

第二部分

您需要将[FromQuery]属性添加到模型属性

public class QueryObject
{
    [FromQuery(Name = "Number")]
    public int Number { get; set; }
    [FromQuery(Name = "String")]
    public string String { get; set; }
}