gpt4 book ai didi

c# - 对象属性不正确时的 Wcf (400) Bad Request

转载 作者:行者123 更新时间:2023-11-30 15:29:58 30 4
gpt4 key购买 nike

我有一个 Wcf(启用 ajax)服务,它接受一个对象用于方法调用。我的 Wcf 方法如下所示;

[OperationContract]
[XmlSerializerFormat]
[WebInvoke(Method = "POST", UriTemplate = "/XML/GetTypes", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Xml)]
XElement XMLGetTypes(TypeRequest TypeRequest)
{
return Utilities.Convert.ObjectToXElement(TypeRequest.Execute(TypeRequest));
}

'TypeRequest'对象如下;

public class
{
public int Id {get;set;}
public string Name {get; set;}
}

我遇到的问题是,如果我用请求对象中的无效数据调用方法,例如;

<TypeRequest>
<Id>abc</Id>
<Name>Joe King</Name>
</TypeRequest>

如您所见,Id 应该是一个整数,但它是作为字符串传递的。这会导致来自 Wcf 服务的 Bad Request 400 响应。

理想情况下,我想处理错误,并返回合适的响应。例如,我想返回包含错误信息的 JSON 或 XML 响应。

这可能吗?

最佳答案

IIS 允许您在整个管道中创建错误处理程序。您如何处理代码和返回什么取决于您,但我会小心,因为这会处理 IIS 应用程序的所有错误。

public class ErrorHttpHandler : IHttpHandler
{
public bool IsReusable
{
get { return true; }
}

public void ProcessRequest(HttpContext context)
{
if (context.Request.QueryString.Count == 0)
return;

string strStatusCode = context.Request.QueryString[0].Split(';').FirstOrDefault() ?? "500";
int statusCode = 500;
int.TryParse(strStatusCode, out statusCode);

string message = "Unhandled server error.";

switch (statusCode)
{
case 400:
message = "Bad request.";
break;

case 404:
message = "Item not found.";
break;
}

context.Response.StatusCode = statusCode;
context.Response.Write(string.Format("<Error><Message>{0}</Message></Error>", message));
}
}

在您的 web.config 中,为要调用的处理程序添加以下代码:

<system.webServer>
<httpErrors errorMode="Custom">
<clear/>
<error statusCode="404" path="/application/ErrorHandler" responseMode="ExecuteURL"/>
<error statusCode="400" path="/application/ErrorHandler" responseMode="ExecuteURL"/>
</httpErrors>
<handlers>
<add name="ErrorHandler" path="ErrorHandler" verb="*" type="Your Application.ErrorHttpHandler, FrameworkAssembly"/>
</handlers>
</system.webServer>

所有这些都是从 this site 中剔除的.

关于c# - 对象属性不正确时的 Wcf (400) Bad Request,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22913544/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com