C# 操作处理程序WCF Web Api出现故障?
我正在使用WCF web api preview 6构建一个web api,目前我遇到了一个小问题。我希望有一个操作处理程序向操作注入一个IPrincipal,以确定哪个用户发出请求。我已经有了那个操作处理程序,并且已经配置好了。但我注意到,当我用WebInvoke属性修饰操作,同时操作接收到一个IPrincipal和其他域对象时,系统抛出一个异常,告诉我: HttpOperationHandlerFactory无法确定应与服务操作“操作名称”的请求消息内容关联的输入参数。如果操作不需要请求消息中的内容,请在操作中使用HTTP GET方法。否则,请确保一个输入参数的IsContentParameter属性设置为“True”,或者是可分配给以下类型之一的类型:HttpContent、ObjectContentC# 操作处理程序WCF Web Api出现故障?,c#,wcf,asp.net-mvc-3,wcf-web-api,C#,Wcf,Asp.net Mvc 3,Wcf Web Api,我正在使用WCF web api preview 6构建一个web api,目前我遇到了一个小问题。我希望有一个操作处理程序向操作注入一个IPrincipal,以确定哪个用户发出请求。我已经有了那个操作处理程序,并且已经配置好了。但我注意到,当我用WebInvoke属性修饰操作,同时操作接收到一个IPrincipal和其他域对象时,系统抛出一个异常,告诉我: HttpOperationHandlerFactory无法确定应与服务操作“操作名称”的请求消息内容关联的输入参数。如果操作不需要请求消息
1、HttpRequestMessage或HttpRequestMessage
1。
我不知道这里发生了什么。为了给你一些背景知识,我将发布一些代码,让你知道我是如何做事的
行动:
[WebInvoke(UriTemplate = "", Method = "POST")]
[Authorization(Roles = "")]
public HttpResponseMessage<dto.Diagnostic> RegisterDiagnostic(dto.Diagnostic diagnostic, IPrincipal principal)
{
......
}
[WebInvoke(UriTemplate=”“,Method=“POST”)]
[授权(角色=”)]
公共HttpResponseMessage RegisterDiagnostic(dto.Diagnostic诊断,I主要负责人)
{
......
}
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");
var config=new-WebApiConfiguration(){EnableTestClient=true};
config.registeroauthandle()//这是一种扩展方法
routes.SetDefaultHttpConfiguration(配置);
路线。地图服务路线(“测量”);
路线。地图服务路线(“诊断”);
然后,RegisterAuthHandler方法将一个操作处理程序添加到该操作中(如果该操作已使用自定义授权属性修饰)。这就是它的样子:
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;
}
公共静态WebApiConfiguration注册表Authhanlder(此WebApiConfiguration配置)
{
conf.AddRequestHandlers((coll、ep、desc)=>
{
var authorizeAttribute=desc.Attributes.OfType().FirstOrDefault();
if(authorizeAttribute!=null)
{
coll.Add(新的OAuthoOperationHandler(authorizeAttribute));
}
});
返回形态;
}
公共静态WebApiConfiguration AddRequestHandlers(
此WebApiConfiguration conf,
操作请求者(代理)
{
var old=conf.RequestHandlers;
conf.RequestHandlers=old==null?requestHandlerDelegate:(coll,ep,desc)=>
{
旧的(coll、ep、desc);
};
返回形态;
}
有人能帮我吗?提前谢谢你 尝试将诊断参数包装在ObjectContent中,即
ObjectContent
。然后使用ReadAs()方法拉出对象
应该有用。很高兴知道!在即将到来的集成MVC堆栈中,这“应该”不是一个问题。