MVC JQuery加载部分与图像有潜在危险的请求

时间:2015-10-06 14:31:40

标签: jquery model-view-controller

我想通过jQuery加载部分视图并将其加载到页面中。部分视图中包含<img>

这是PartialView:

@model NBAPicks.Models.PickedTeamLogoViewModel

@ViewHelpers.GetTeamLogoForPick(Model.TeamAbbr, Model.GameID, Model.UserName)

这是帮助代码:

public static MvcHtmlString GetTeamLogoForPick(string abbr, int gameID, string userName)
{
    var imagePath = ImageUrl("Team Logos", abbr + ".gif");
    var html = "<img src=\"" + imagePath + "\" id=\"" + gameID.ToString() + "_" + userName + "\" class=\"pick-logo\" />";
    return new MvcHtmlString(html);
}

ImageUrl的位置:

private static string ImageUrl(string subFolder, string fileName)
{
    return VirtualPathUtility.ToAbsolute(ImagesDir + "\\" + subFolder + "\\" + fileName);
}

这是Controller方法:

[Authorize]
public JsonResult GetPickedTeamLogo(string teamAbbr, int gameID, string userName)
{
    var viewModel = new PickedTeamLogoViewModel()
    {
        TeamAbbr = teamAbbr,
        GameID = gameID,
        UserName = userName
    };
    return Json(_partialStringRenderer.RenderRazorViewToString(this, "_PickedTeamLogo", viewModel), JsonRequestBehavior.AllowGet);
}

这是我在jQuery中加载它的地方:

setTimeout(function () {
    var ajaxRequest = $.ajax({
        type: "GET",
        url: '@Html.Raw(Url.Content("~/Admin/GetPickedTeamLogo/?teamAbbr="))' + teamAbbr + '&gameID=' + gameID + '&userName=' + userName,
        cache: false,
        data: { teamAbbr: teamAbbr, gameID: gameID, userName: userName },
        async: false,
        dataType: 'json',
        error: function () {
            console.log('failure');
            alert('AJAX fail - this is a bug, report it!');
        },
        success: function (result) {
            console.log('AJAX call returned successfully');
            console.log('result: ' + result);
            $("#" + userName + "_logo").load(result); // HERE!!!
        }
    });
}, 0);

现在,通过控制台输出,返回的html看起来很好并且正确:

<img src="/Content/Team Logos/MIA.gif" id="1238_tim" class="pick-logo" />

但是控制台在我尝试加载html时报告了这个错误:

  

获取http://localhost:53441/%3Cimg 400(错误请求)

我可以从这里深入研究这个错误:

  

从客户端(&lt;)中检测到潜在危险的Request.Path值。

为什么会出现此错误,以及如何解决?

1 个答案:

答案 0 :(得分:1)

其中一个请求字段包含<,触发ASP MVC安全措施,认为用户可能会尝试提交脚本标记或其他内容。

要解决此问题,请将此操作过滤器添加到GetPickedTeamLogo控制器操作:

[ValidateInput(false)]

编辑: 对不起,我忘记了,你还必须在你的web.config

中添加它
<httpRuntime requestValidationMode="2.0"/>   

Edit2:

好的,您的问题来自于您的帮助程序返回一个img标记,您尝试将其用作$("#" + userName + "_logo").load(result);

中的网址(结果)

你不需要调用加载,但只需附加你的图像:

$("#" + userName + "_logo").append(result);