Ron*_*n C 14 asp.net-mvc json middleware asp.net-core
我想通过一个JsonResult
Asp.Net Core中间件来回应,但是如何实现这一点并不明显.我用Google搜索了很多但收效甚微.我可以通过一个JsonResult
全局来回应,通过IActionFilter
设置ActionExecutedContext.Result
到JsonResult
那个很酷.但在这种情况下,我想JsonResult
从我的中间件中有效地返回一个.怎么能实现呢?
我提出了关于问题的问题,JsonResult
IActionResult
但理想情况下,解决方案可以使用任何IActionResult
来编写来自中间件的响应.
Hen*_*ema 12
中间件是ASP.NET Core的一个非常低级的组件.写出JSON(高效)是在MVC存储库中实现的.具体来说,在JSON格式化程序组件中.
它基本归结为在响应流上编写JSON.在最简单的形式中,它可以在这样的中间件中实现:
using Microsoft.AspNetCore.Http;
using Newtonsoft.Json;
// ...
public async Task Invoke(HttpContext context)
{
var result = new SomeResultObject();
var json = JsonConvert.SerializeObject(result);
await context.Response.WriteAsync(json);
}
Run Code Online (Sandbox Code Playgroud)
对于其他可能对如何JsonResult
从中间件返回输出感兴趣的人来说,这就是我想出的:
public async Task Invoke(HttpContext context, IHostingEnvironment env) {
JsonResult result = new JsonResult(new { msg = "Some example message." });
RouteData routeData = context.GetRouteData();
ActionDescriptor actionDescriptor = new ActionDescriptor();
ActionContext actionContext = new ActionContext(context, routeData, actionDescriptor);
await result.ExecuteResultAsync(actionContext);
}
Run Code Online (Sandbox Code Playgroud)
这种方法允许一个中间件从a返回输出,JsonResult
并且该方法接近于能够使中间件从任何地方返回输出.IActionResult.
处理更通用的情况,用于创建的代码ActionDescriptor
将需要改进.但是把它带到这一点就足以满足我对返回a的输出的需求JsonResult
.
正如 @Henk Mollema 所解释的,我还利用 Newtonsoft.Json JsonConvert 类通过 SerializeObject 方法将对象序列化为 JSON。对于 ASP.NET Core 3.1,我在 Run 方法中使用了 JsonConvert。以下解决方案对我有用:
启动.cs
using Newtonsoft.Json;
// ...
public class Startup
{
public void Configure(IApplicationBuilder app)
{
app.Run(async context =>
{
context.Response.StatusCode = 200;
context.Response.ContentType = "application/json";
await context.Response.WriteAsync(JsonConvert.SerializeObject(new
{
message = "Yay! I am a middleware"
}));
});
}
}
Run Code Online (Sandbox Code Playgroud)
小智 6
从 ASP.NET Core 5.0 开始,您可以使用WriteAsJsonAsync
将 JSON 写入响应流。此方法处理序列化并适当设置内容类型标头。
例如
using Microsoft.AspNetCore.Http;
// ..
public async Task InvokeAsync(HttpContext context)
{
var result = new SomeResultObject();
await context.Response.WriteAsJsonAsync(result);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6420 次 |
最近记录: |