Я создаю веб-api, используя веб-приложение ASPF api preview 6, в настоящее время я застрял с небольшой проблемой. Я хотел бы иметь обработчик операции для ввода IPrincipal в операцию, чтобы определить, какой пользователь делает запрос. У меня уже есть этот обработчик операций и уже настроен. Но я заметил, что когда я декорировать операцию с атрибутом WebInvoke и одновременно операция получает IPrincipal и другой домен объекта, система выдает исключение, говоря мне:Операционный обработчик WCF Web Api не работает?
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)
{
......
}
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");
Тогда метод 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, который приходит, это «должно» не быть проблемой. –