我正在与拥有这样的网络方法的客户合作:
[WebMethod]
public XmlDocument Send(string stuff)
{
// ...
}
目前,有一类异常发生,代码重新抛出,触发ASP.Net的异常标准处理。
我们想要更改它,以便webmethod仍返回状态代码500,但我们提供了一些text/plain
诊断信息,而不是默认的ASP.Net内容。
这样做的恰当方法是什么?
我使用Context.Response.End
这样做了工作:
[WebMethod]
public XmlDocument Send(string stuff)
{
try
{
// ...normal processing...
return xmlDocument;
}
catch (RelevantException)
{
// ...irrelevant cleanup...
// Send error
Context.Response.StatusCode = 500;
Context.Response.Headers.Add("Content-Type", "text/plain");
Context.Response.Write("...diagnostic information here...");
Context.Response.End();
return null;
}
}
但是这感觉很糟糕,所以我希望有更好的答案。
答案 0 :(得分:2)
但是这感觉很糟糕,所以我希望有更好的答案。
感觉很乱,因为它 hacky。
更好的答案是:返回XML,就像您所说的那样,使用您想要包含的任何信息。该服务返回XML,它用于代码,而非人们使用。
[WebMethod]
public XmlDocument Send(string stuff)
{
try
{
// ...normal processing, creates xmlDocument...
return xmlDocument;
}
catch (RelevantException)
{
// ...irrelevant cleanup...
// ...error processing, creates xmlDocument...
Context.Response.StatusCode = 500;
return xmlDocument;
}
}