ASP.NET WebApi返回JsonResult失效,MVC项目需返回{result:"ok"}
嘿,我看到你遇到的问题了——在Web API控制器里混用了MVC的相关类型,这就是导致JsonResult返回异常的核心原因。咱们一步步来解决:
问题根源拆解
错误的
HttpPost特性引用
你当前使用的[System.Web.Mvc.HttpPost]是给MVC控制器(继承自Controller)用的,而你的控制器继承自ApiController(Web API专属),需要使用System.Web.Http命名空间下的HttpPost特性。Web API不兼容MVC的
JsonResultJsonResult是MVC框架的返回类型,Web API控制器有自己的序列化机制和返回类型体系,强行返回MVC的JsonResult会导致解析异常。
修正后的代码示例
using System; using System.Web.Http; using System.Web.Http.Cors; using Microsoft.Xrm.Sdk; using CRM_WebApp.Models; using Microsoft.Xrm.Sdk.Query; using CRM_WebApp.Services; namespace CRM_WebApp.Controllers { [EnableCors(origins: "*", headers: "*", methods: "*")] public class CallBackFormController : ApiController { // 改用Web API专属的HttpPost特性 [HttpPost] public IHttpActionResult Post([FromBody] CallBackFormModel model) { // 这里可以添加你的业务逻辑,比如调用CRM服务、处理表单数据等 // 方案1:直接返回匿名对象,Web API会自动序列化为JSON return Ok(new { result = "ok" }); // 方案2:使用ApiController内置的Json方法返回 // return Json(new { result = "ok" }); } } }
额外注意事项
- 确保你的Web API路由配置正确(通常在
WebApiConfig.cs中),示例配置如下:
public static class WebApiConfig { public static void Register(HttpConfiguration config) { // 启用特性路由 config.MapHttpAttributeRoutes(); // 配置默认路由 config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } }
- 如果你的项目是ASP.NET Framework,要确认
Global.asax中已经注册了Web API路由:GlobalConfiguration.Configure(WebApiConfig.Register);
内容的提问来源于stack exchange,提问作者Oscar Dominguez Navarrete
相关产品推荐
相关产品推荐

