我有一个WCF Restful服务,我想返回HttpResponseMessage的方法,因为它看起来是结构化的,而不是仅仅返回数据或异常或任何其他可能返回到那里的方式。
我假设这是正确的,如果没有让我知道,但是我的问题是当我尝试设置HttpResponseMessage.Content
时会发生什么。执行此操作时,我在其中进行了RESTful调用请求身份验证的客户端。
这是我的代码:
在界面中:
[WebGet(UriTemplate = "/GetDetailsForName?name={name}"
, ResponseFormat = WebMessageFormat.Json)]
HttpResponseMessage GetDetailsForName(string name);
在类里:
public HttpResponseMessage GetDetailsForName(string name)
{
HttpResponseMessage hrm = new HttpResponseMessage(HttpStatusCode.OK)
{
//If I leave this line out, I get the response, albeit empty
Content = new StringContent("Hi")
};
return hrm;
}
我想尝试使用
Request.CreateResponse
,但似乎无法从WCF Restful方法访问Request。 OperationContext.Current.RequestContext没有CreateResponse。有指针吗?
最佳答案
不幸的是,这行不通。演示的代码说:
问题是HttpResponseMessage
是可抛弃的,并不意味着要序列化,而StringContent
根本无法序列化。
至于为什么将您重定向到身份验证表单-
当服务无法序列化StringContent
时,它将引发异常
并返回一个400 HTTP状态代码,该状态代码将被解释为身份验证问题。