Ajax 调用在我的 ASP.NET MVC 4 项目中偶尔返回 403 错误
Posted
技术标签:
【中文标题】Ajax 调用在我的 ASP.NET MVC 4 项目中偶尔返回 403 错误【英文标题】:Ajax calls sporadically returning a 403 error in my ASP.NET MVC 4 project 【发布时间】:2021-07-26 16:34:14 【问题描述】:我刚刚注意到当我将 ASP.NET MVC 4 项目发布到我们的 UAT Web 服务器上时发生的一个问题,我在本地测试时没有遇到该问题。我有一个带有下拉列表的表单,它由 AJAX 调用填充,以从存储过程中获取值。这些调用似乎随机返回 403 禁止错误,我无法确定原因。被调用的方法前一刻工作正常,然后是 403。任何提示将不胜感激。请看下面的详细信息:
Ajax JQuery 调用:
$.fn.GetOriginalValue = function()
var cobId = $("#startcob").val();
var sourceSystemId = $("#SelectedSourceSystemID").val();
var sourceSystem = $("#SelectedSourceSystemName").val();
var metricName = $("#SelectedMetricName").val();
var clientId;
var dataToSend;
if (isJuno)
clientId = $("#ClientID").val();
var key2 = $("#key2").val();
var key3 = $("#key3").val();
var key4 = $("#key6").val();
var key5 = $("#key9").val();
var currency = $("#cmdCurrency").val();
dataToSend =
key1: clientId,
key2: key2,
CobId: cobId,
key3: key3,
key4: key4,
key5: key5,
metricName: metricName,
currency: currency,
sourceSystem: sourceSystem
;
if (dataToSend != null)
$.ajax(
cache: false,
type: 'POST',
url: '@Url.Action("GetCurrentValueJuno")',
data: dataToSend,
success: function(data)
if (data.success && data.currentValue != null)
$("#OriginalValue").val(data.currentValue);
else
$("#OriginalValue").val("");
);
;
控制器方法:
/// <summary>
/// Lookup the current value of a metric
/// </summary>
/// <param name="key1"></param>
/// <param name="key2"></param>
/// <param name="cobId"></param>
/// <param name="key3"></param>
/// <param name="key4"></param>
/// <param name="key5"></param>
/// <param name="metricName"></param>
/// <param name="currency"></param>
/// <param name="sourceSystem"></param>
/// <returns></returns>
[AllowCrossSiteJson]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult GetCurrentValueJuno(
int? key1,
int? key2,
DateTime? cobId,
string key3,
int? key4,
int? key5,
string metricName,
string currency,
string sourceSystem
)
if (key1 != null && key2 != null && cobId != null)
//method calls stored procedure to obtain current value based on inputs provided
var metrics = CFAQueries.GetCurrentValueJuno(
key1,
key2,
cobId,
key3,
key4,
key5,
metricName,
sourceSystem);
var currentValue = metrics?.Value ?? 0;
if (!string.IsNullOrEmpty(currency))
var fxrate = GetFxRate((DateTime)cobId, currency);
currentValue = currentValue / (fxrate ?? 1);
return Json(
new
currentValue = currentValue,
success = metrics != null
,
JsonRequestBehavior.AllowGet);
return Json(
new
success = false
,
JsonRequestBehavior.AllowGet);
屏幕截图显示了带有方法调用的“网络”选项卡,一个失败,一个成功,间隔片刻,具有完全相同的表单输入。
在调查之后,我尝试将以下内容添加到我的 web.config:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
</system.webServer>
我也尝试过接受的答案:Setting Access-Control-Allow-Origin in ASP.Net MVC - simplest possible method
但是两者都没有解决我的问题。任何帮助或建议将不胜感激。谢谢。
【问题讨论】:
使用 http 检查您的托管位置,如果是 https 则会阻止您的请求 控制器名称是什么? 嗨,Rahul,它是 HTTP,并且大部分时间都使用相同的调用(请参见屏幕截图 1)。正是这种表面上的不一致让我感到困惑。 嗨 Jayrag,控制器名称是 CFAController,它可以很好地访问控制器方法 删除 [AllowCrossSiteJson] 并尝试 【参考方案1】:你有多个 access-control-allow-origin
检查这个问题Access-control-allow-origin with multiple domains
【讨论】:
谢谢,我删除了 [AllowCrossSiteJson] 并重新发布,但仍然得到相同的混合响应,大部分都有效,但偶尔不会,但现在只有一行访问控制允许来源。 你在 Global.asax.cs 中允许 Access-Control-Allow-Origin 吗?? POST crrfwsuat.barcapint.com/CAMJUNO/CFA/GetCurrentValueJuno 403(禁止)发送@jquery?v=Ahs0DmGdq6s…9HvfWfUlDTMZlXdY1:1 ajax @jquery?v=Ahs0DmGdq6s…9HvfWfUlDTMZlXdY1:1 jQuery.225,11.axd?r= 1_16…2,1_173-4iXKf:10654 $.fn.GetOriginalValue @ VM1165:343 $.fn.SetDropdownRequired @ VM1165:261 eval @ VM1165:157 dispatch @ jquery?v=Ahs0DmGdq6s…9HvfWfUlDTMZlXdY1:1 s @ jquerysDmGd6?v=Ahsq6 …9HvfWfUlDTMZlXdY1:1 ListPicker._handleMouseUp 不,我现在只允许在 web.config 中使用它。像这样:以上是关于Ajax 调用在我的 ASP.NET MVC 4 项目中偶尔返回 403 错误的主要内容,如果未能解决你的问题,请参考以下文章
ASP.Net MVC Recaptcha Jquery Ajax 问题
为啥我的 Jquery Ajax 调用不起作用?(Asp.net MVC C#)