Я создаю веб-API с помощью предварительного просмотра веб-интерфейса WCF 6, в настоящее время у меня возникла небольшая проблема.Я хотел бы иметь обработчик операции для внедрения принципала IP в операцию, чтобы определить, какой пользователь делает запрос.У меня уже есть этот обработчик операций, и он уже настроен.Но я заметил, что когда я декорирую операцию с помощью атрибута WebInvoke и одновременно операция получает IPrincipal и другой объект домена, система выдает исключение, говорящее мне:
HttpOperationHandlerFactory не может определить входные данныепараметр, который должен быть связан с содержимым сообщения запроса для операции службы «NameOfTheOperation».Если операция не ожидает содержимого в сообщении запроса, используйте метод HTTP GET с операцией.В противном случае убедитесь, что для одного входного параметра свойство IsContentParameter имеет либо значение True, либо тип, который можно назначить одному из следующих параметров: HttpContent, ObjectContent 1, HttpRequestMessage or HttpRequestMessage
1.
Не знаюзнать, что здесь происходит.Чтобы дать вам некоторую предысторию, я опубликую часть своего кода, чтобы вы знали, как я это делаю.
Операция:
[WebInvoke(UriTemplate = "", Method = "POST")]
[Authorization(Roles = "")]
public HttpResponseMessage<dto.Diagnostic> RegisterDiagnostic(dto.Diagnostic diagnostic, IPrincipal principal)
{
......
}
Веб-API WCF знает, когда вводить IPrincipalпотому что я украшаю операцию с помощью пользовательского атрибута Authorization.
Конфигурация в глобальном файле:
var config = new WebApiConfiguration() {EnableTestClient = true};
config.RegisterOAuthHanlder(); //this is an extension method
routes.SetDefaultHttpConfiguration(config);
routes.MapServiceRoute<MeasurementResource>("Measurement");
routes.MapServiceRoute<DiagnosticResource>("Diagnostic");
Затем метод 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;
}
Может кто-нибудь помочь мне с этим?Спасибо заранее!