c#mvc中的webapi怎么迫使服务端返回字符串
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#mvc中的webapi怎么迫使服务端返回字符串相关的知识,希望对你有一定的参考价值。
返回值是string就好了。
public string Get(int id)return "字符串";
用AJAX取json格式的就是这样的。
$.ajax(url:'/api/Values/1',dataType:'json',type:'get',success:function(data)console.log(data);)主要是客户端的设置,如果客户端能够支持XML,就会返回XML格式的,如果能支持json,就会直接返回字符串。
Accept:application/json, text/javascript, */*; q=0.01
像这样就是字符串的
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
像这样就是xml的
还可以这样:
var formatters = GlobalConfiguration.Configuration.Formatters;formatters.Remove(formatters.XmlFormatter);
这样就可以强制不使用XML格式返回
参考技术A web api 默认的已 xml 格式返回数据现在开发一般都是以 json 格式为主
下面配置让 webapi 默认返回 json ,在需要返回 xml 时只需要加一个查询参数 datatype=xml 即可返回 xml 格式数据
配置如下:
1.新建 一个 mvc webapi 项目 (framework4.0)
2.找到默认的 WebApiConfig.cs 文件
3.修改 WebApiConfig.cs 文件
<span style="font-family: Arial, Helvetica, sans-serif;">using System;</span>
using System.Collections.Generic;
using System.Linq;
using System.Net.Http.Formatting;
using System.Web.Http;
namespace MvcWebApi
public static class WebApiConfig
public static void Register(HttpConfiguration config)
.......
GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
//默认返回 json
GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings.Add(
new QueryStringMapping("datatype", "json", "application/json"));
//返回格式选择 datatype 可以替换为任何参数
GlobalConfiguration.Configuration.Formatters.XmlFormatter.MediaTypeMappings.Add(
new QueryStringMapping("datatype", "xml", "application/xml"));
4.修改默认路由规则 WebApiConfig.cs 文件中
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http.Formatting;
using System.Web.Http;
namespace MvcWebApi
public static class WebApiConfig
public static void Register(HttpConfiguration config)
//新加的规则
config.Routes.MapHttpRoute(
name: "DefaultApi2",
routeTemplate: "api/controller/action/id",
defaults: new id = RouteParameter.Optional
);
//新加的规则
config.Routes.MapHttpRoute(
name: "DefaultApi1",
routeTemplate: "api/controller/action",
defaults: new id = RouteParameter.Optional
);
//默认路由
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/controller/id",
defaults: new id = RouteParameter.Optional
);
。。。。。
5.添加测试 action
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
namespace MvcWebApi.Controllers
public class ValuesController : ApiController
/// <summary>
/// web api 默认将以 get 开头的只支持 get 请求,post 开头的支持支 post 请求
/// </summary>
/// <returns></returns>
[System.Web.Http.HttpGet]
[System.Web.Http.HttpPost]
public MyClass GetMyClass()
return new MyClass()
id=1111,
name="张三",
time=DateTime.Now
;
public class MyClass
public int id set; get;
public string name set; get;
public DateTime time set; get;
6.测试
请求地址:http://localhost:61667/api/values/getmyclass
响应内容:
"id":1111,"name":"张三","time":"2015-09-29T16:43:07.4731034+08:00"
请求地址:http://localhost:61667/api/values/getmyclass?datatype=xml
响应内容:
<MyClass><id>1111</id><name>张三</name><time>2015-09-29T16:43:45.3663004+08:00</time></MyClass>
远程服务器返回错误:(405) Method Not Allowed
【中文标题】远程服务器返回错误:(405) Method Not Allowed【英文标题】:The remote server returned an error: (405) Method Not Allowed 【发布时间】:2014-08-22 15:23:38 【问题描述】:我试图研究这个问题,但失败了,因此我在这里问这个问题。我有一个调用 Web API 的 MVC 应用程序。其中一种方法返回 405 错误,我不知道为什么,尤其是同一控制器中的所有其他方法都可以正常工作。
这就是我从 MVC 端调用此方法的方式:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(String.Format("0/api/Account/ArchiveAddress?addressId=1", uri, addressId));
request.Method = "Get";
try
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
catch (Exception e)
return RedirectToAction("Error", "Error", new error = e.Message );
其中 uri 是一个字符串:
http://localhost:52599
并且addressId是一个int
我在 Web API 端的方法是这样的:
[Route("ArchiveAddress")]
public IHttpActionResult ArchiveUserAddress(int addressId)
var address = _addressRepo.Find(addressId);
...
正如我所说,我以完全相同的方式在 API 上调用许多不同的方法,它们都可以正常工作。只是这个不想表现。可能是什么原因造成的?
【问题讨论】:
【参考方案1】:我认为您需要使用 [HttpGet]
属性来装饰您的操作方法 (ArchiveUserAddress
),或者将其命名为以 Get...
开头的名称,例如GetArchiveUserAddress
。就目前而言,它会匹配 POST
方法,这意味着没有 getter,因此您会遇到错误。
【讨论】:
以上是关于c#mvc中的webapi怎么迫使服务端返回字符串的主要内容,如果未能解决你的问题,请参考以下文章
转载C#.NET WebApi返回各种类型(图片/json数据/字符串),.net图片转二进制流或byte
服务器端 webapi 调用上的 Windows 身份验证失败