ASP.NET Core API发送包含在双引号中的字符串

问题描述 投票:4回答:2

我的ASP.NET Core API为要上传到Azure Blob存储的文件生成SAS。看起来字符串被用双引号括起来,这就是我用来上传文件的前端解决方案的问题。

我怎样才能返回一个字符串,但要确保它不是用双引号括起来的?

这是API控制器:

public async Task<IActionResult> GetSAS(string blobUri, string _method)
{
    if (string.IsNullOrEmpty(blobUri) || string.IsNullOrEmpty(_method))
       return new StatusCodeResult(400);

    // Get SAS
    var sas = _fileServices.GetSAS(blobUri, _method);

    return Ok(sas);
}
c# asp.net-web-api asp.net-core
2个回答
5
投票

正如评论中所讨论的那样,您在强制JSON响应的类上有一个[Produces]属性。从docs on ProducesAttribute我们可以看到它可以应用于动作以及控制器。因此,您可以通过添加它来覆盖特定操作,在您需要的情况下,您需要text/plain

[Produces("text/plain")]
public async Task<IActionResult> GetSAS(string blobUri, string _method)
{
    //snip
}

3
投票

你将返回一个OkResult,它将序列化传入它的对象。由于该对象是一个字符串,并且由于默认的序列化程序是JSON,因此您的响应最终为JSON字符串,即在其周围加上双引号。

要解决此问题,您可以采用许多不同的路径。首先,您只需将返回类型更改为string即可。这将导致ContentResult缠绕它,这将不会导致序列化。例如:

public async Task<string> GetSAS(string blobUri, string _method)
{
    ...

    return sas;
}

其次,您可以使用Produces属性将返回内容类型指定为text/plain

[Produces("text/plain")]
public async Task<IActionResult> GetSAS(string blobUri, string _method)

最后,您可以简单地保持原样,而是在客户端将结果正确地解释为JSON。您可以在JavaScript代码中使用JSON.parse来获取字符串值:

var sas = JSON.parse(result);
© www.soinside.com 2019 - 2024. All rights reserved.