Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在ApicController中为单个方法返回JSON?_C#_Asp.net Mvc_Asp.net Web Api_Asp.net Web Api2_Asp.net Apicontroller - Fatal编程技术网

C# 如何在ApicController中为单个方法返回JSON?

C# 如何在ApicController中为单个方法返回JSON?,c#,asp.net-mvc,asp.net-web-api,asp.net-web-api2,asp.net-apicontroller,C#,Asp.net Mvc,Asp.net Web Api,Asp.net Web Api2,Asp.net Apicontroller,目前,我的ApiControllers正在返回XML作为响应,但对于单个方法,我希望返回JSON。i、 e.我无法进行全局更改以强制响应为JSON public class CarController : ApiController { [System.Web.Mvc.Route("api/Player/videos")] public HttpResponseMessage GetVideoMappings() { var model = new M

目前,我的
ApiController
s正在返回XML作为响应,但对于单个方法,我希望返回JSON。i、 e.我无法进行全局更改以强制响应为JSON

public class CarController : ApiController
{  
    [System.Web.Mvc.Route("api/Player/videos")]
    public HttpResponseMessage GetVideoMappings()
    {
        var model = new MyCarModel();    
        return model;
    }
}
我尝试过这样做,但似乎无法将我的模型正确地转换为JSON字符串:

var jsonString = Json(model).ToString();    
var response = this.Request.CreateResponse(HttpStatusCode.OK);
response.Content = new StringContent(jsonString, Encoding.UTF8, "application/json");
return response;
试试这个

您只需执行
返回Ok(model)
并将返回类型更改为

例如:

public class CarController : ApiController
{
    [System.Web.Mvc.Route("api/Player/videos")]
    public IHttpActionResult GetVideoMappings()
    {
        var model = new MyCarModel();
        return Ok(model);
    }
}

如果无法进行全局更改以强制响应为JSON, 然后尝试:

[Route("api/Player/videos")]
public HttpResponseMessage GetVideoMappings()
{
    var model = new MyCarModel();
    return Request.CreateResponse(HttpStatusCode.OK,model,Configuration.Formatters.JsonFormatter);
}

[Route("api/Player/videos")]
public IHttpActionResult GetVideoMappings()
{
    var model = new MyCarModel();
    return Json(model);    
}
如果您想进行全局更改,请首先转到
YourProject/App\u Start/WebApiConfig.cs
并添加:

config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(
config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml"));
寄存器
方法的底部

然后尝试:

[Route("api/Player/videos")]
public IHttpActionResult GetVideoMappings()
{
    var model = new MyCarModel();
    return Ok(model);    
}

可能问题出在WebApiConfig文件上。 在文件末尾添加这两行

var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");
config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);

它位于Project/App_Start/WebApiConfig.cs For asp.net MVC中,返回的是XML而不是JSON,因为调用方正在请求XML。可以使用一个过滤器将返回的格式强制转换为JSON,该过滤器添加所需的头并让MVC解析JSON

public class AcceptHeaderJsonAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext)
    {
        actionContext.Request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));    
    }
}

因此,您可以使用此属性修饰要强制JSON响应的方法,并保持与任何其他方法相同的全局JSON配置和序列化。

对于API控制器,由调用方确定如何创建响应。除非您专门添加代码来强制执行一种类型的响应。下面是一个简单的API方法示例,以及当调用请求XML或JSON时会发生什么

public class XmlEampleController : ApiController
{
    [HttpPost]
    [ActionName("MyOrderAction")]
    public HttpResponseMessage MyOrder([FromBody]MyOder order)
    {
        if (order != null)
        {
            return Request.CreateResponse<MyOder>(HttpStatusCode.Created, order);
        }
        return Request.CreateResponse(HttpStatusCode.BadRequest);
    }

[Serializable]
public partial class MyOder
{
    private string dataField;
    public string MyData
    {
        get
        {
            return this.dataField;
        }
        set
        {
            this.dataField = value;
        }
    }
}

}
public类XmlEampleController:ApiController
{
[HttpPost]
[ActionName(“MyOrderAction”)]
公共HttpResponseMessage MyOrder([FromBody]MyOrder)
{
如果(订单!=null)
{
return Request.CreateResponse(HttpStatusCode.Created,order);
}
返回请求.CreateResponse(HttpStatusCode.BadRequest);
}
[可序列化]
公共部分类MyOder
{
私有字符串数据字段;
公共字符串MyData
{
得到
{
返回此.dataField;
}
设置
{
this.dataField=值;
}
}
}
}

示例:

尝试返回类型
JsonResult
而不是
HttpResponseMessage
,然后您可以返回
Json
对象,如下所示:
return Json(model)
尝试此操作您只需执行
return Ok(model)
@RicardoPontual它是System.Web.Mvc.JsonResult吗?我得到一个
无法隐式地将类型'System.Web.Http.Results.JsonResult'转换为'System.Web.Mvc.JsonResult'
System.Web.Mvc.JsonResult
,如果您的类继承自
System.Web.Mvc.Controller
,或者您可以维护
HttpResponseMessage
并使用
return Request.CreateResponse>(HttpStatusCode.OK,model)
这是.Net核心,他正在询问.Net中的ApiControllerFramework@Sigex不,不是你说的对,我的错。