【发布时间】:2015-10-15 15:47:56
【问题描述】:
我在扩展 Attribute、IOperationBehavior、IParameterInspector 时抛出 WebFaultException,但它不起作用。
public class ApplicationNotSupportedAttribute : Attribute, IOperationBehavior, IParameterInspector
{
private readonly ApplicationNotSupportedBehaviour behaviour;
public ApplicationNotSupportedAttribute()
{
Logging<string>.Error("ApplicationNotSupportedAttribute");
behaviour = new ApplicationNotSupportedBehaviour();
}
public void AddBindingParameters(OperationDescription operationDescription, System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
{
behaviour.AddBindingParameters(operationDescription, bindingParameters);
}
public void ApplyClientBehavior(OperationDescription operationDescription, System.ServiceModel.Dispatcher.ClientOperation clientOperation)
{
behaviour.ApplyClientBehavior(operationDescription, clientOperation);
}
public void ApplyDispatchBehavior(OperationDescription operationDescription, System.ServiceModel.Dispatcher.DispatchOperation dispatchOperation)
{
behaviour.ApplyDispatchBehavior(operationDescription, dispatchOperation);
}
public void Validate(OperationDescription operationDescription)
{
behaviour.Validate(operationDescription);
}
public object BeforeCall(string operationName, object[] inputs)
{
throw new WebFaultException(HttpStatusCode.Forbidden);
}
public void AfterCall(string operationName, object[] outputs,
object returnValue, object correlationState)
{
}
然后我在服务中:
[WebInvoke(Method = "POST", UriTemplate = "myMethod", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
[OperationContract]
[ApplicationNotSupportedAttribute]
myMethodResult myMethod(MyMethodRequest myMethodRequest);
从上面运行代码后,我得到 200 Ok。如果我添加
throw new WebFaultException(HttpStatusCode.Forbidden);
在 myMethod 中,我得到 403 Forbidden。如下代码:
public myMethodResult myMethod(MyMethodRequest myMethodRequest)
{
throw new WebFaultException<myObject>(myObj, HttpStatusCode.Forbidden);
}
有可能在我们真正进入 myMethod 之前得到 403 吗?
【问题讨论】:
-
您尝试过 IOperationInvoker 的运气吗?在那里你可以做一些之前和之后的事情。
-
我试过了,但没有结果:|
-
您必须使用 ActionFilterAttribute(不是 Attribute)来创建您的 Attribute,在 OnActionExecuting 方法中调用 throw
标签: c# wcf http-status-code-403