gpt4 book ai didi

asp.net-web-api - 如何设置 ASP.NET Web Api 路由约束 HTTP 状态返回代码

转载 作者:行者123 更新时间:2023-12-02 16:20:35 24 4
gpt4 key购买 nike

我正在使用 ASP.NET Web Api 2 框架并使用如下基本路由约束。

    [Route("Number/{id:int:min(2):max(10)}")]
public HttpResponseMessage GetNumber([FromUri] int id)
{
return (id > 0)
? Request.CreateResponse(HttpStatusCode.OK, id)
: Request.CreateResponse(HttpStatusCode.PreconditionFailed);
}

我想知道 id 何时与上述约束冲突,例如1 或 11,如何覆盖默认的 HTTP 状态返回代码 404?

非常感谢。

最佳答案

您可以创建一个自定义路由约束,该约束将根据您的意愿检查最小值、最大值,并且还允许您指定 HttpStatusCode,以防约束未正确满足。

public class RangeWithStatusRouteConstraint : IHttpRouteConstraint
{
private readonly int _from;
private readonly int _to;
private readonly HttpStatusCode _statusCode;

public RangeWithStatusRouteConstraint(int from, int to, string statusCode)
{
_from = from;
_to = to;
if (!Enum.TryParse(statusCode, true, out _statusCode))
{
_statusCode = HttpStatusCode.NotFound;
}
}

public bool Match(HttpRequestMessage request, IHttpRoute route, string parameterName, IDictionary<string, object> values,
HttpRouteDirection routeDirection)
{
object value;
if (values.TryGetValue(parameterName, out value) && value != null)
{
var stringValue = value as string;
var intValue = 0;

if (stringValue != null && int.TryParse(stringValue, out intValue))
{
if (intValue >= _from && intValue <= _to)
{
return true;
}

//only throw if we had the expected type of value
//but it fell out of range
throw new HttpResponseException(_statusCode);
}
}

return false;
}
}

现在您需要在属性映射中注册它:

        var constraintResolver = new DefaultInlineConstraintResolver();
constraintResolver.ConstraintMap.Add("rangeWithStatus", typeof(RangeWithStatusRouteConstraint));
config.MapHttpAttributeRoutes(constraintResolver);

你的路线现在看起来像这样:

public class MyController : ApiController
{
[Route("Number/{id:int:rangeWithStatus(2, 10, PreconditionFailed)}")]
public HttpResponseMessage GetNumber([FromUri] int id)
{
return Request.CreateResponse(HttpStatusCode.OK, id);
}
}

在本例中,ConflictHttpStatusCode.Conflict 枚举的字符串表示形式,稍后将其转换为约束中的枚举值。

通过这样的设置,如果值超出 [2, 10] 范围,Web API 基础设施将使用 409 状态代码而不是默认的 404 进行响应。

关于asp.net-web-api - 如何设置 ASP.NET Web Api 路由约束 HTTP 状态返回代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26156750/

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