【发布时间】:2012-08-26 08:13:07
【问题描述】:
我有以下 API 控制器:
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 方法中为空。 (我的提取器基于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)"}
编辑:
最后,这似乎可能是ApiController、System.Web.Http.AuthorizeAttribute 和HttpPost 组合的错误(使用HttpGet 时确实有效)。已提交错误报告。
【问题讨论】:
标签: c# asp.net-mvc post controller