在WCF中如何删除404响应正文?

时间:2012-04-27 02:34:44

标签: wcf http-status-code-404 asp.net-routing

我配置了WCF服务,并且我正在使用路由来配置它。一切都按我想要的方式工作,除了404消息有一个正文Service Endpoint not found.

我希望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();
    }
}

如何使此网址http://localhost/RootService的响应为空404主体?

1 个答案:

答案 0 :(得分:0)

我找到了几种方法,我在下面列出了两个。他们的关键是将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);