0

我配置了 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();
    }
}

如何使这个 url http://localhost/RootService的响应有一个空的 404 正文?

4

1 回答 1

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);

于 2012-04-28T18:22:25.300 回答