我已经为我的服务实施了IErrorHandler
女巫需要在错误的授权情况下返回403而不是400。
这就是我的ProvideFault
方法的样子:
public void ProvideFault(Exception error, MessageVersion version, ref Message fault)
{
if (((FaultException)error).Code.SubCode.Name == "FailedAuthentication")
{
WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.Forbidden;
WebOperationContext.Current.OutgoingResponse.StatusDescription =
"StatusCode is forced to change in order to have the correct response on authentication.";
}
}
我想知道是否有任何方法可以更好地检查错误及其状态代码,或者如何获得授权异常而不是FaultException
女巫更通用?我发现在FailedAuthentication
字符串之后检查并不好,事实上它的授权不认证...
如果您使用的是C#6.0及以上版本,则可以使用Exception Filters。例子是:
public string Example()
{
try
{
/* Method Logic */
return string.Empty;
}
catch (System.Net.Http.HttpRequestException e) when (e.Message.Contains("400"))
{
return "unauthorized";
}
}
在你的情况下:
public string Example()
{
try
{
/* Method Logic */
return string.Empty;
}
catch (System.Net.Http.HttpRequestException e) when (e.Message.Contains("400"))
{
ProvideFault(e, "", e.Message);
}
}
public void ProvideFault(System.Net.Http.HttpRequestException error, MessageVersion version, ref Message fault)
{
/* your logic according to your needs. */
}