×

webapi返回文件

webapi返回文件(web开发中api返回的数据结构)

admin admin 发表于2023-04-06 21:40:10 浏览82 评论0

抢沙发发表评论

本文目录一览:

webapi 如何返回json字符串?

方法一:(改配置法)

找到Global.asax文件,在Application_Start()方法中添加一句:

protected void Application_Start()

{

AreaRegistration.RegisterAllAreas();

WebApiConfig.Register(GlobalConfiguration.Configuration);

FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);

RouteConfig.RegisterRoutes(RouteTable.Routes);

// 使api返回为json

GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();

}

在WebApi中返回一个JSON格式的数据,如何到客户端就变了

转载 在使用Web Api的时候,有时候只想返回JSON;实现这一功能有多种方法,本文提供两种方式,一种传统的,一种作者认为是正确的方法。

JSON in Web API – the formatter based approach

只支持JSON最普遍的做法是:首先清除其他所有的formatters,然后只保留JsonMediaTypeFormatter。

有了HttpConfiguration的实例,你将会很简单的清除所有formatters,然后重新添加JsonMediaTypeFormatter。

实现代码如下:

configuration.Formatters.Clear();

configuration.Formatters.Add(new JsonMediaTypeFormatter());这种方式虽然可以实现功能,但是所有的conent negotiation还是会发生,这就会产生以下额外的开销了。因为,你已经知道要返回的结果了,也只想返回Json,其他的content negotiation都不需要了。-webapi返回文件

下面的方法可以很好的解决这个问题。

JSON in Web API – the conneg based approach

最好的方法是使用自定义的只返回Json Result的content negotiation代替Web Api中默认的content negotiation。

Conneg通过实现IContentNegotiator的Negotiator方法实现扩展。Negotiator方法返回ContentNegotiationResult(它包装了你选择的headers和formatter)。-webapi返回文件

下面的方法通过传递一个JsonMediaTypeFormatter给自定义的conneg negotiator,让它一直返回applicaton/json 的content-type以及JsonMediaTypeFormatter。这种方法避免了每次请求都要重新创建一次formatter。-webapi返回文件

代码如下:

public class JsonContentNegotiator : IContentNegotiator

{

private readonly JsonMediaTypeFormatter _jsonFormatter;

public JsonContentNegotiator(JsonMediaTypeFormatter formatter)

{

_jsonFormatter = formatter;

}

public ContentNegotiationResult Negotiate(Type type, HttpRequestMessage request, IEnumerableMediaTypeFormatter formatters)-webapi返回文件

{

var result = new ContentNegotiationResult(_jsonFormatter, new MediaTypeHeaderValue("application/json"));-webapi返回文件

return result;

}

}接下来,你需要在HttpConfiguration实例上注册你的新的实现机制:

var jsonFormatter = new JsonMediaTypeFormatter();

//optional: set serializer settings here

config.Services.Replace(typeof(IContentNegotiator), new JsonContentNegotiator(jsonFormatter));

通过替换默认的DefaultContentNegotiator,我们使用我们自定义的JsonContentNegotiator,它只支持Json,而且可以马上返回。

如果你想更深入的了解Content Negotiation的知识,你可以查看作者的这篇文章。

总结

通过使用自定义的JsonContentNegotiator替换系统默认的DefaultContentNegotiator,很好的实现Web Api只返回Json的功能,而且没有额外的开销。

webapi返回图片客户端如何接收

webapi返回图片客户端如何接收想显示出图片是吗,再uploadSuccess里面打印下file对象(后台),看下文件路径,然后$("选择器").attr("src","文件路径")就可以了

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格式返回

怎么让webapi返回json

返回的时候封装成json即可。

参考: Student st1 = new Student(1, "dg", 18, new Date());

Student st2 = new Student(2, "dg", 18, new Date());

Student st3 = new Student(3, "dg", 18, new Date());

Student st4 = new Student(4, "dg", 18, new Date());

Student st5 = new Student(5, "dg", 18, new Date());

List li = new ArrayList();

JSONObject JO1 = new JSONObject(st1);

JSONObject JO2 = new JSONObject(st2);

JSONObject JO3 = new JSONObject(st3);

JSONObject JO4 = new JSONObject(st4);

JSONObject JO5 = new JSONObject(st5);

li.add(JO1);

li.add(JO2);

li.add(JO3);

li.add(JO4);

li.add(JO5);

JSONArray Ja = new JSONArray(li);

Map ma = new HashMap();

ma.put("Result", "OK");

ma.put("Records", Ja);

JSONObject js = new JSONObject(ma);

out.print(js);

返回结果:

{"Result":"OK","Records":[{"recordDate":"Fri Dec 16 17:54:39 CST 2011","name":"dg","age":18,"personId":1},{"recordDate":"Fri Dec 16 17:54:39 CST 2011","name":"dg","age":18,"personId":2},{"recordDate":"Fri Dec 16 17:54:39 CST 2011","name":"dg","age":18,"personId":3},{"recordDate":"Fri Dec 16 17:54:39 CST 2011","name":"dg","age":18,"personId":4},{"recordDate":"Fri Dec 16 17:54:39 CST 2011","name":"dg","age":18,"personId":5}]}-webapi返回文件

可以将存放Java对象的 列表 直接转化为 json 数组 或对象,不必要过分麻烦的转换。

从数据库取出后换:

SourceDao sd = new SourceDao();

JSONArray ja = new JSONArray(sd.query(content));

webapi 返回类型到底应该是什么才合适,这是个问题

我们知道在WebAPi中对于响应结果我们都是这样用的:

public HttpResponseMessage GetResultT(T t)

{

return Request.CreateResponseT(HttpStatusCode.OK, t);

}

在项目中前端为了和其他统一,封装了一套响应的结果和状态码,要求直接返回对象,于是将上述修改成比如如下:

public ResultListPerson GetResult()

{

var result = new ResultListPerson();

return result;

}

public class ResultT : BaseResult

{

public T Data;

}

public class BaseResult

{

public string Message;

public int Status;

public ErrorCode ErrorCode;

}

public enum ErrorCode

{

......

}

统观以上两种方法,一种是WebAPi内置响应的结果,另外一种则是直接返回自定义响应结果。

于是乎,我开始思索这两种方法虽然都能得到我们想要的结果,但是有什么区别没有呢?说的更加明确一点的是,二者在数据响应上有没有性能上的差异呢?

WebAPi响应结果和自定义响应结果二者性能差异

以上则是需要返回对象来进行处理,而有些我们则不需要返回任何对象来进行处理例如直接返回void,而在WebAPi中对应需要返回 IHttpActionResult 例如自定义返回则是如下:

public void GetFirst()

{.....}

在WebAPi中则是进行如下返回:

public IHttpActionResult GetSecond()

{

return OK();

}

下面我们在控制台中分别来测试这二者在WebHost以及在SelfHost上的差异,我们如何获取其差异呢?我们通过对void方法和http方法在控制台中发出1000个请求来获取其总共花费时间来进行比较。-webapi返回文件

SelfHost

[HttpGet]

public void GetFirst()

{

StringBuilder stringbuilder = new StringBuilder();

for (int i = 0; i 20; i++)

{

stringbuilder.Append("something");

}

}

[HttpGet]

public IHttpActionResult GetSecond()

{

StringBuilder stringbuilder = new StringBuilder();

for (int i = 0; i 20; i++)

{

stringbuilder.Append("something");

}

return Ok();

}

在控制台中方法如下:

private const string voidUrl = "";

private const string httpUrl = "";

private static ListTimeSpan voidTimes = new ListTimeSpan();

private static ListTimeSpan httpTimes = new ListTimeSpan();

static void Main(string[] args)

{

Console.WriteLine("Start Test....");

for (int i = 0; i 1000; i++)

{

voidTimes.Add(getResponse(voidUrl));

Thread.Sleep(10);

Console.WriteLine("void Test " + i);

}

Console.WriteLine("Finished Void Test");

for (int i = 0; i 1000; i++)

{

httpTimes.Add(getResponse(httpUrl));

Thread.Sleep(10);

Console.WriteLine("http Test " + i);

}

Console.WriteLine("Finished Http Test");

var voidTotalTime = voidTimes.Sum(t = t.Milliseconds);

Console.WriteLine("void方法发出1000个请求总共需要时间:" + voidTotalTime);

Console.WriteLine("void方法平均每一个请求需要时间:" + voidTotalTime / 1000.00 + "秒");

var httpTotalTime = httpTimes.Sum(t = t.Milliseconds);

Console.WriteLine("http方法发出1000个请求总共需要时间: " + httpTotalTime);

Console.WriteLine("http方法平均每一个请求需要时间: " + httpTotalTime / 1000.00 + "秒");

Console.Read();

}

static TimeSpan getResponse(string url)

{

var stopWatch = new Stopwatch();

stopWatch.Start();

var httpClient = new HttpClient();

httpClient.BaseAddress = new Uri(url);

var task = httpClient.GetAsync(httpClient.BaseAddress).Result;

var result = task.Content.ReadAsAsync(typeof(object));

var timeSpan = stopWatch.Elapsed;

stopWatch.Stop();

return timeSpan;

}