我刚刚注意到一个问题,当我发布我的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);
}
屏幕截图显示了带有方法调用的Network选项卡,一个失败,一个成功,间隔很短,表单输入完全相同。
经过调查,我尝试添加以下到我的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
不过,这两个都没有解决我的问题。任何帮助或建议将不胜感激。谢谢。
2条答案
按热度按时间1tuwyuhd1#
您有多个访问控制允许源
检查此问题Access-control-allow-origin with multiple domains
k3bvogb12#
在这个问题上纠结了两天之后...
我的项目在我的开发机器和我客户的服务器上运行良好,但只是直接在那个服务器上运行。
客户端安装了一个WAF,它会阻塞请求并返回403错误。我在IIS中找不到任何关于这些错误的日志,它应该更快地向我报告
我不知道这是否是相同的情况尴尬,但我分享我的解决方案,也许它可以帮助别人...
在多台服务器上运行了三年的代码
代码现在工作,WAF不能解析JSON与单引号作为分隔符...所以我的解决方案是只使用JSON.stringify: