I have a WCF service configured and I’m using routing to configure it. Everything is working the way I want it, except the 404 messages have a body stating Service Endpoint not found.
I’d like the 404 to have an empty response body.
Here is my route registration:
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)));
}
Here is my service class:
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
[ServiceContract]
public class ServiceProvider
{
[WebGet]
public Test ValidUrl()
{
return new Test();
}
}
How do I make the response for this url http://localhost/RootService have an empty 404 body?
I found a few ways to do this and I’ve listed two below. They key is having the UriTemplate set as *. This makes the method match all routes that aren’t explicitly matched otherwise.
I don’t like this way as well, but it works:
Both of these methods have overloads that take a string as a message to provide to the requesting client. The WebFaultException needs to be like this going that route though:
throw new WebFaultException<string>("Resource not found", HttpStatusCode.NotFound);