如何从Asp.net WebApi RC返回任意json对象?

时间:2012-06-15 09:30:09

标签: asp.net asp.net-mvc-4 asp.net-web-api

在我使用此代码返回一个只有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;
            }
        }
    }

3 个答案:

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