在我使用此代码返回一个只有id属性的任意json对象之前。 现在,如果不支持HttpResponseMessage并且它现在使用Newtonsofts JSON.NET,我如何将其转换为WebApi的新RC版本?
public HttpResponseMessage<JsonValue> Post(MyModel model)
{
var id = _theService.AddEntity(model);
dynamic okResponse = new JsonObject();
okResponse["id"] = id;
return new CreateResponse<JsonValue>(okResponse);
}
和...
public class CreateResponse<T> : ResponseBase<T>
{
public CreateResponse()
: base(HttpStatusCode.Created)
{
}
public CreateResponse(T resource)
: base(resource, HttpStatusCode.Created)
{
}
}
public abstract class ResponseBase<T> : HttpResponseMessage<T>
{
protected ResponseBase(HttpStatusCode httpStatusCode)
: base(httpStatusCode)
{
}
protected ResponseBase(T resource, HttpStatusCode httpStatusCode)
: base(resource, httpStatusCode)
{
if (resource is IApiResource)
{
var apiResource = resource as IApiResource;
var resourceLocation = new ResourceLocation();
apiResource.SetLocation(resourceLocation);
Headers.Location = resourceLocation.Location;
}
}
}
答案 0 :(得分:2)
在控制器中使用Request.CreateResponse(statuscode, content)
答案 1 :(得分:2)
CreateResponse扩展方法不接受动态变量。
请更改
dynamic okResponse = new JsonObject();
类似
var okResponse = new JsonObject();
请参阅此链接: https://aspnetwebstack.codeplex.com/discussions/359242
答案 2 :(得分:0)
也许我错过了你的问题,但你可以这样做:
public dynamic Post(MyModel model)
{
var id = _theService.AddEntity(model);
return new { id = id };
}
编辑:假设您的客户将Content-type设置为application / json