webmethod中的自定义错误处理返回XmlDocument

时间:2014-07-13 17:34:27

标签: asp.net webmethod

我正在与拥有这样的网络方法的客户合作:

[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;
    }
}

但是这感觉很糟糕,所以我希望有更好的答案。

1 个答案:

答案 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;
    }
}