【问题标题】:ASP.NET Core API sending string wrapped in double quotesASP.NET Core API 发送用双引号括起来的字符串
【发布时间】:2017-12-28 23:42:44
【问题描述】:

我的 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);
}

【问题讨论】:

  • 向我们展示您现在拥有的代码,否则我们无能为力。
  • 你的控制器方法是什么样的?默认情况下,ASP.NET 核心不应用双引号引起来,但听起来您的响应以某种方式被格式化为 JSON。
  • sas的类型是什么?字符串?
  • 刚刚发布了API方法。在我的 API 控制器顶部,我确实有 [Produces("application/json")],这解释了为什么它是 JSON
  • @DavidG 是的,SAS 是字符串,但我的 API 控制器正在生成 JSON

标签: c# asp.net-web-api asp.net-core


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您将返回一个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);
    

    【讨论】:

    • 很好的解释。谢谢!因为@DavidG 花了很多时间帮助我,所以我选择了他作为答案,但至少要感谢你的精彩解释!
    • 当然。没问题。我想的也差不多。我只是想添加解释和一些替代方法来为后代解决问题。
    • @Sam 这不是时间问题,而是正确答案的问题——这个显然更详细,如果你切换它我会很高兴。
    • 我想我会让 SO 和历史上的伟大人物做出决定 :-) 非常感谢你们!
    猜你喜欢
    • 2016-02-14
    • 1970-01-01
    • 1970-01-01
    • 2019-05-11
    • 1970-01-01
    • 1970-01-01
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多