我的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);
}
正如评论中所讨论的那样,您在强制JSON响应的类上有一个[Produces]
属性。从docs on ProducesAttribute
我们可以看到它可以应用于动作以及控制器。因此,您可以通过添加它来覆盖特定操作,在您需要的情况下,您需要text/plain:
[Produces("text/plain")]
public async Task<IActionResult> GetSAS(string blobUri, string _method)
{
//snip
}
你将返回一个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);