как отправить код состояния в качестве ответа на неавторизованные запросы в службу отдыха WCF - PullRequest
1 голос
/ 17 июня 2011

Я пытаюсь разработать службу отдыха WCF, для которой требуется авторизация с использованием пользовательского атрибута.

Я хочу отправить ответ в виде кода состояния 401, если ключ авторизации недействителен в пользовательском атрибуте, который реализует IOperationBehavior и IParameterInspector.

любой может сказать мне, как отправить код состояния 401как ответ от пользовательского атрибута.

Вот реализация

public class AuthorizationAttribute : Attribute,IOperationBehavior,
IParameterInspector
{

 #region IOperationBehavior Members 

 public void ApplyDispatchBehavior(OperationDescription operationDescription,
 System.ServiceModel.Dispatcher.DispatchOperation dispatchOperation)
 {
  dispatchOperation.ParameterInspectors.Add(this);
 }  
 #endregion

 #region IParameterInspector Members

 public object BeforeCall(string operationName, object[] inputs)
 {          

  string publicKey =
  WebOperationContext.Current.IncomingRequest.Header["Authorization"];

   if (publicKey == "592F2D7E-5E9C-400D-B0AE-1C2603C34137")
   {

   } 
   else
   {
    // Here i would like to send the response back to client 
     with the status code       
   }

 }

 return null;

}

 #endregion

}


[Authorization]
public bool signin(string username, string password)
{
}

Ответы [ 3 ]

1 голос
/ 17 июня 2011

Бросить исключение WebFormatException

throw new WebFaultException(HttpStatusCode.Unauthorized);
0 голосов
/ 23 июня 2016
public string CreateError(int code ,string description)
        {
            Context.Response.StatusCode = code;
            Context.Response.StatusDescription = description;
            Context.ApplicationInstance.CompleteRequest();
            return null;
        }

Тогда из ваших методов веб-сервиса просто используйте это, чтобы вернуть пример ошибок:

return CreateError(403, "Request denied by server");
0 голосов
/ 17 июня 2011

Если вы используете WCF Rest Starter Kit, вы также можете сделать:

throw new Microsoft.ServiceModel.Web.WebProtocolException(System.Net.HttpStatusCode.Unauthorized, "message", ex);

Этот метод имеет несколько дополнительных перегрузок, если вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...