javascript - 从 Controller 返回 JavaScript 作为内容或 JavaScriptResult

标签 javascript c# asp.net-mvc

如果我从 MVC Controller 返回一些 JavaScript 作为其中之一,有什么区别

内容

[HttpPost]
    public ActionResult MyEndPoint([System.Web.Http.FromBody] string result)
    {
       string jsResponse = "<script>";

        if(result == "SUCCESS")
        {
            jsResponse = "SubmitOrder();";
        }
        else
        {
            jsResponse = "alert('Problem processing your order, please try again')";
        }
        jsResponse += "</script>";
        return Content(jsResponse);
    }

JavaScript结果

  [HttpPost]
    public ActionResult MyEndPoint([System.Web.Http.FromBody] string result)
    {
       string jsResponse = "<script>";

        if(result == "SUCCESS")
        {
            jsResponse = "SubmitOrder();";
        }
        else
        {
            jsResponse = "alert('Problem processing your order, please try again')";
        }
        jsResponse += "</script>";
        return JavaScript(jsResponse);
    }

另外,当从 MVC Controller 方法/调用返回 JavaScript 时,我需要注意什么安全预防措施吗?

最佳答案

首先,JavaScriptResult 将响应返回为 application/javascript MIME 类型,而不是使用 Content 的默认 text/html () 返回。因此,JavaScriptResult 不会执行您所尝试的操作(执行 JS)。浏览器不仅仅执行响应中发送的任何内容。由于 Content() 实际上正在发送 HTML,因此浏览器可以呈现它,在本例中执行 script 标记中的脚本。我还没有看到 JavaScriptResult 经常被使用,但在我见过的地方,它通常用于动态提供脚本。例如:

Controller

public ActionResult SomeAction() {
    ...
    return JavaScript("script content");
}

查看

<script src="MyController/SomeAction">

关于安全性,您显然希望避免执行从用户传入的任何内容,无论是来自请求正文、查询字符串等。我敢打赌,但这有点设计问题并且您将前端和后端耦合在一起,因此无论如何,最好谨慎使用。

关于javascript - 从 Controller 返回 JavaScript 作为内容或 JavaScriptResult,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57224030/

相关文章:

javascript - 从谷歌地图回调函数返回值

javascript - window.onerror 不在 Firefox 中触发

c# - XML 序列化和命名空间前缀

asp.net-mvc - MVC 2 服务器上的空引用

sql-server - 如何实现记录更改的自动时间戳 (SQL Server)

mysql - 如何分离这两个过程?

javascript - Jquery - 通过悬停从列表中获取 div 编号

javascript - 找出元素上触发了什么事件?

javascript - linq 在 javascript 中工作吗

c# - 使用 LdapConnection 枚举 AD