[英]C# Task<IActionResult> Return Json
I am writing my first Azure FunctionApp, and I am looking to return a valid JSON Object from a deserialized class that was created from a Faker JSON object as shown below:
Class:
public class TestData
{
//based on faker API
public int userId { get; set; }
public int id { get; set; }
public string title { get; set; }
public bool completed { get; set; }
}
Function App 入口點和返回碼:
public static Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,ExecutionContext context, ILogger log)
{
var configBuilder = new ConfigurationBuilder()
.SetBasePath(context.FunctionAppDirectory)
.AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables();
var config = configBuilder.Build();
log.LogInformation("Config Loaded");
// for later use when i get past the current issue
var settings = new AppSettings();
config.Bind("AppSettings", settings);
//Setting this seems to be the route cause, but need to respond correctly?
req.HttpContext.Response.Headers.Add("Content-Type", "application/json");
var worker = new WorkerClass();
var results = worker.DoSomeWork();
return Task.FromResult(results);
//Also Tried:
//return Task.FromResult<IActionResult>(new OkObjectResult(results));
}
測試 Worker Class 用於返回的 object 數據和 JSON 序列化:
public class WorkerClass
{
public IActionResult DoSomeWork()
{
try
{
var testdata = new TestData
{
userId = 123,
id = 1,
title = "delectus aut autem",
completed = true
};
//formatted as Json correctly
var results = JsonConvert.SerializeObject(testdata, Formatting.Indented);
return new OkObjectResult(results);
}
catch (Exception dswEx)
{
return new BadRequestObjectResult($"\{ERROR: {dswEx.Message}\}");
}
}
}
我已經嘗試了幾種方法來嘗試使用響應 object 類型來達到一個干凈的 JSON output 類型,因為最好添加基於 ObjectResults 的邏輯,但我錯過了明顯的懷疑線,
如果返回設置為: return Task.FromResult(results);
響應是轉義的 JSON output:
"{\"userId\": 1,\"id\": 1,\"title\": \"delectus aut autem\",\"completed\": false}"
如果返回修改為: return Task.FromResult<IActionResult>(new OkObjectResult(results));
然后響應被轉義但封裝在 Object 包裝器中:
{
"value": "{\r\n \"userId\": 1,\"id\": 1,\"title\": \"delectus aut autem\",\"completed\": false}",
"formatters": [],
"contentTypes": [],
"declaredType": null,
"statusCode": 200
}
我想要實現的只是將正確的響應 header 作為 application/json 和結果集如下所示:
{
"userId": 1,
"id": 1,
"title": "delectus aut autem",
"completed": false
}
提前致謝。
您想返回new JsonResult(data)
,其中data
是您的托管結構(不是像您出於某種奇怪的原因那樣序列化的 json 數據)。
您不需要將 object 序列化為 json,Net 會為您完成。
return Ok(testdata);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.