如果我从 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/