2012-04-27 6 views
0

WCFサービスが設定されており、ルーティングを使用して設定しています。 404メッセージに本文がある以外はすべてWCFで404応答本体を削除するにはどうすればよいですか?

私は404に空のレスポンスボディを持たせたいと思います。ここで

は私のルート登録あり:ここで

public class Global : HttpApplication 
{ 

    protected void Application_Start(object sender, EventArgs e) 
    { 
     RegisterRoutes(RouteTable.Routes); 

    } 

    private void RegisterRoutes(RouteCollection routes) 
    { 
     routes.Add(new ServiceRoute("RootService", new WebServiceHostFactory(), typeof(ServiceProvider))); 
    } 

は私のサービスクラスです:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] 
[ServiceContract] 
public class ServiceProvider 
{ 
    [WebGet] 
    public Test ValidUrl() 
    { 
     return new Test(); 
    } 
} 

は、どのように私はこのURL http://localhost/RootServiceの応答が空の404体を持って作るのですか?

+0

リクエストを傍受し、それに応じてレスポンスを返すMessageInspectorを作成してみてください – Rajesh

答えて

0

私はこれを行うにはいくつかの方法を見つけました。私は以下の2つを挙げました。それらのキーは、*として設定されたUriTemplateを持っています。これにより、明示的に照合されていないすべての経路と一致するようになります。

[WebGet(UriTemplate="*")] 
    public void ErrorForGet() 
    { 
     throw new WebFaultException(HttpStatusCode.NotFound); 
    } 

私もこの方法を好きではないが、それは動作します:

[WebGet(UriTemplate="*")] 
    public void ErrorForGet() 
    { 
     WebOperationContext.Current.OutgoingResponse.SetStatusAsNotFound(); 
    } 

これらのメソッドの両方が要求元のクライアントに提供するために、メッセージとして文字列を取るオーバーロードを持っています。 WebFaultExceptionは、このようなルートになる必要があります。throw new WebFaultException<string>("Resource not found", HttpStatusCode.NotFound);

関連する問題