2

我有一个访问注册表并返回值的 WCF 服务。我想在某些情况下返回 HTTP 500 响应,例如当我从注册表中无任何例外地返回空值时。这是我的代码。我不想返回“null”字符串,而是返回 HTTP 500 响应。

private string baseKey = "SOFTWARE\\Action\\software\\Station";

public string GetCode()
{
    string Code;
    try
    {
        using (RegistryKey regKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine,
            Environment.Is64BitOperatingSystem ? RegistryView.Registry64 : RegistryView.Registry32))
        {
            using (RegistryKey subKey = regKey.OpenSubKey(baseKey, false))
            {
                Code = (string)subKey.GetValue("Code");
            };
        };

        return string.IsNullOrEmpty(Code) ? "null" : Code;
    }
    catch (Exception ex)
    {
        return "null";
    }
}

如何创建此 HTTP 500 响应以返回给客户端?

请帮忙。

4

3 回答 3

3

如果异常冒泡到 WCF,WCF 会将 HTTP 状态设置为 500 并返回故障。

换句话说,抛出异常以向客户端返回 500 响应。

于 2013-09-05T16:28:37.453 回答
3

如果你试过这个?

throw new WebFaultException<string>("Registry key not found", HttpStatusCode.InternalServerError);
于 2013-09-05T16:31:47.073 回答
3

您可以注入状态码,如下所示:

WebOperationContext ctx = WebOperationContext.Current;
ctx.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.InternalServerError;

注意:InternalServerErrorHttpStatusCode映射到 HTTP 500 的枚举值。

于 2013-09-05T16:31:47.577 回答