ASP.NET Web Forms中Web API仅内部AJAX可用,Postman无法访问怎么办?
解决Postman访问ASP.NET Web API返回HTML的问题
核心原因
jQuery的$.getJSON会自动在请求头中添加Accept: application/json,Web API据此返回JSON格式;而Postman默认请求头未指定该参数,导致Web API无法识别期望的响应格式,转而返回网站默认HTML页面。
具体解决方法
1. 在Postman中添加Accept请求头
打开Postman的请求编辑界面,切换到「Headers」标签,添加一条键值对:
- 键:
Accept - 值:
application/json
发送请求后即可获取JSON响应。
2. 确保Web API路由优先级高于Web Forms路由
在Global.asax.cs的Application_Start方法中,先注册Web API路由,再注册Web Forms的路由(如果存在)。正确顺序示例:
protected void Application_Start(object sender, EventArgs e) { // 先注册Web API路由 RouteTable.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = System.Web.Http.RouteParameter.Optional } ); // 再注册Web Forms路由(如果有) RouteConfig.RegisterRoutes(RouteTable.Routes); }
若Web Forms路由先被匹配,会直接返回页面而非API响应。
3. (可选)强制Web API返回JSON格式
如果需要让API始终返回JSON,无需依赖请求头,可以修改控制器方法的返回类型为HttpResponseMessage并指定媒体类型:
public HttpResponseMessage GetAllProducts() { var response = Request.CreateResponse(HttpStatusCode.OK, products); response.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json"); return response; }
此方法适合不需要支持多格式响应的场景。
内容的提问来源于stack exchange,提问作者Pavel
相关产品推荐
相关产品推荐

