私はWCF web api preview 6を使用してWeb APIを構築していますが、現在は少し問題が残っています。どのユーザーがリクエストを行っているかを判断するために、操作にIPrincipalを注入する操作ハンドラを用意したいと思います。私はすでにその操作ハンドラを持っており、既に設定されています。しかし、私はWebInvoke属性で操作を装飾し、操作が同時にIPrincipalと他のドメインオブジェクトを受け取ると、システムは例外をスローして次のように通知することに気づきました。サービス操作 'NameOfTheOperation'の要求メッセージコンテンツに関連付けられています。操作が要求メッセージの内容を期待しない場合は、操作でHTTP GETメソッドを使用します。それ以外の場合は、確実に1つの入力パラメータは、それが「本当」に設定IsContentParameterプロパティですか、次のいずれかに割り当て可能であるタイプであるたかということ:HttpContent、ObjectContent操作ハンドラWCF Web APIが異常に機能していますか?
私はここで何が起こっているのか分かりません。あなたにいくつかの背景を与えるために、私は自分のコードのいくつかを投稿して、私は物事をどのようにしているかを知らせます。
操作:
[WebInvoke(UriTemplate = "", Method = "POST")]
[Authorization(Roles = "")]
public HttpResponseMessage<dto.Diagnostic> RegisterDiagnostic(dto.Diagnostic diagnostic, IPrincipal principal)
{
......
}
WCFのWeb APIは、私はカスタム認可属性と操作を飾るためIPrincipalを注入する際に知っています。グローバルなファイルで
設定:
var config = new WebApiConfiguration() {EnableTestClient = true};
config.RegisterOAuthHanlder(); //this is an extension method
routes.SetDefaultHttpConfiguration(config);
routes.MapServiceRoute<MeasurementResource>("Measurement");
routes.MapServiceRoute<DiagnosticResource>("Diagnostic");
それはカスタム認可attibuteが施されていた場合、RegisterOAuthHandler方法は、操作に操作ハンドラを追加します。これは見た目です:
public static WebApiConfiguration RegisterOAuthHanlder(this WebApiConfiguration conf)
{
conf.AddRequestHandlers((coll, ep, desc) =>
{
var authorizeAttribute = desc.Attributes.OfType<AuthorizationAttribute>().FirstOrDefault();
if (authorizeAttribute != null)
{
coll.Add(new OAuthOperationHandler(authorizeAttribute));
}
});
return conf;
}
public static WebApiConfiguration AddRequestHandlers(
this WebApiConfiguration conf,
Action<Collection<HttpOperationHandler>, ServiceEndpoint, HttpOperationDescription> requestHandlerDelegate)
{
var old = conf.RequestHandlers;
conf.RequestHandlers = old == null ? requestHandlerDelegate : (coll, ep, desc) =>
{
old(coll, ep, desc);
};
return conf;
}
誰か助けてもらえますか?先進的でありがとう!
素晴らしい!出来た! – Daniel
お役立ち情報統合されたMVCスタックでは、これは問題ではないはずです。 –