gpt4 book ai didi

c# - MVC Api Action & System.Web.Http.AuthorizeAttribute - 如何获取发布参数?

转载 作者:太空狗 更新时间:2023-10-29 22:33:25 24 4
gpt4 key购买 nike

我有以下 API Controller :

public class TestController : ApiController
{
[HttpPost]
[APIAuthorizeAttribute]
public IQueryable<Computers> ListOfComputersInFolder(Guid folderId)
{
return GetListOfComputersForFolder(folderId);
} // End of ListOfComputersInFolder
} // End of TestController

下面是我的基本APIAuthorizeAttribute

public class APIAuthorizeAttribute : System.Web.Http.AuthorizeAttribute
{
public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext)
{
var Request = System.Web.HttpContext.Current.Request;
var folderId = Request.RequestContext.RouteData.Values["folderId"] ?? Request.Params["folderId] as string;
if(null == folderId)
{
folderId = actionContext.ControllerContext.RouteData.Values["folderId"];
}

base.OnAuthorization(actionContext);
}
}

我遇到的问题是 folderId 在 onAuthorize 方法中出现 null。 (我的提取器基于 this 代码)。

在我看来,这应该可行,但我似乎无法实现。关于我做错了什么以及我应该如何获取发布的参数有什么想法吗?

编辑:我尝试使用以下内容直接读取帖子数据:

using (StreamReader inputStream = new StreamReader(request.InputStream))
{
output = inputStream.ReadToEnd();
}
request.InputStream.Position = 0;

这让我获得了 JSON 格式的发布数据,然后我可以解析这些数据,但是我的调用从未成功。我在响应中得到以下异常:

  <h2>500 - Internal server error.</h2>
<h3>There is a problem with the resource you are looking for, and it cannot be displayed.

at System.Json.JXmlToJsonValueConverter.JXMLToJsonValue(Stream jsonStream, Byte[] jsonBytes)\u000d\u000a at System.Net.Http.Formatting.JsonMediaTypeFormatter.<>c__DisplayClass7.<OnReadFromStreamAsync>b__6()\u000d\u000a at System.Net.Http.Internal.TaskHelpers.RunSynchronously[TResult](Func`1 func, CancellationToken cancellationToken)"}

编辑:最后,这似乎可能是 ApiControllerSystem.Web.Http.AuthorizeAttributeHttpPost 组合的错误(它在使用 HttpGet 时确实有效)。错误报告已提交。

最佳答案

AuthorizeAttribute应该有一个 AuthorizationContext参数而不是 HttpActionContext 参数,您应该能够从中访问 RouteData 例如

public override void OnAuthorization(AuthorizationContext filterContext)
{
var folderId = filterContext.RouteData.Values["folderId"];
...
}

更新

注意到您正在使用 ApiController 并因此使用 Http.AuthorizeAttribute(解释为什么您没有 AuthorizationContext)。在这种情况下,您可以通过操作上下文获取 RouteData,例如

var folderId = actionContext.Request.GetRouteData().Values["folderId"];

关于c# - MVC Api Action & System.Web.Http.AuthorizeAttribute - 如何获取发布参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12216545/

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