我配置了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主体?
答案 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);