次の 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 メソッドで null が出てくることです。(このコードに基づいてフェッチャーを作成しました)。
これはうまくいくはずですが、うまくいかないようです。私が間違っていることと、投稿されたパラメーターを取得する方法についてのアイデアはありますか?
編集:次のように投稿データを直接読み取ってみました:
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
ます)。バグレポートが提出されました。