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怎么迫使服务端返回字符串的主要内容,如果未能解决你的问题,请参考以下文章

.Net Core Mvc/WebApi 返回结果封装

转载C#.NET WebApi返回各种类型(图片/json数据/字符串),.net图片转二进制流或byte

服务器端 webapi 调用上的 Windows 身份验证失败

远程服务器返回错误:(405) Method Not Allowed

mvc webapi怎么允许外部html访问

WebAPI返回JSON的正确格式