【问题标题】:C# Web API Return Action name + Parameters as filenameC# Web API 返回动作名称 + 参数作为文件名
【发布时间】:2019-01-10 08:04:10
【问题描述】:

我使用 VS2010 创建了一个 C# MVC4 Web api。当我尝试通过调用 api (http://localhost/APITest/test?data=12345-45678-890) 进行调试时,系统返回操作 + 参数 ["test?data=12345-45678-890"] 作为文件名并要求保存文件。我无法完全打开或保存文件。我可以知道它导致问题的原因是什么吗?

提前致谢。

尝试四处搜索并不能真正找到我遇到的类似问题。

    [HttpGet]
    public DocumentModel Test(String data)
    {
        List<DocumentModel> doc = new List<DocumentModel>();
        DocumentModel docObj;
        docObj.Name = "Venom";
        docObj.Decription = "Fiction story";            
        docObj.Remarks = "Remarks";
        doc.Add(docObj);
        return docObj;
    }

应该将 DocumentModel 作为 json 字符串返回。

【问题讨论】:

    标签: c# asp.net-mvc asp.net-apicontroller


    【解决方案1】:

    您可以设置方法签名以返回 ActionResult:

    public ActionResult Test(String data)
    

    ...然后用 Json() 包装你的返回对象:

    return Json(docObj);
    

    查看this SO question 了解更多示例。

    【讨论】:

    • 手动编码结果违反了WebAPI的原则,返回对象本身,然后框架根据上下文(JSON、XML等)决定如何编码。跨度>
    【解决方案2】:

    感谢大家的回复。 我发现问题根源在于我的 APiController 中有多个 [HttpGet] 操作。部署到 IIS 并进行测试运行后,我从浏览器收到了实际的错误消息。它给出错误“找到与请求匹配的多个操作”。但是在运行VS2010调试过程中并没有报错,直接在浏览器上用action+parameters提示文件名。经过一番搜索,发现下面的链接并解决了问题。

    https://hassantariqblog.wordpress.com/2015/11/30/webapi-multiple-actions-were-found-that-match-the-request/

    非常感谢。

    【讨论】:

      猜你喜欢
      • 2015-05-19
      • 2013-05-12
      • 2020-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多