gpt4 book ai didi

asp.net-mvc - Web API 和 ValidateAntiForgeryToken

转载 作者:行者123 更新时间:2023-12-03 05:34:15 24 4
gpt4 key购买 nike

我们有一些现有的 MVC Web 服务,它们在网页中称为 AJAX 样式。这些服务利用 ValidateAntiForgeryToken 属性来帮助防止请求伪造。

我们正在寻求将这些服务迁移到 Web API,但似乎没有等效的防伪功能。

我错过了什么吗?是否有不同的方法来解决 Web API 请求伪造问题?

最佳答案

您可以实现这样的授权属性:

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
public sealed class ValidateAntiForgeryTokenAttribute : FilterAttribute, IAuthorizationFilter
{
public Task<HttpResponseMessage> ExecuteAuthorizationFilterAsync(HttpActionContext actionContext, CancellationToken cancellationToken, Func<Task<HttpResponseMessage>> continuation)
{
try
{
AntiForgery.Validate();
}
catch
{
actionContext.Response = new HttpResponseMessage
{
StatusCode = HttpStatusCode.Forbidden,
RequestMessage = actionContext.ControllerContext.Request
};
return FromResult(actionContext.Response);
}
return continuation();
}

private Task<HttpResponseMessage> FromResult(HttpResponseMessage result)
{
var source = new TaskCompletionSource<HttpResponseMessage>();
source.SetResult(result);
return source.Task;
}
}

然后用它来装饰您的 API 操作:

[ValidateAntiForgeryToken]
public HttpResponseMessage Post()
{
// some work
return Request.CreateResponse(HttpStatusCode.Accepted);
}

关于asp.net-mvc - Web API 和 ValidateAntiForgeryToken,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11476883/

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