gpt4 book ai didi

c# - setRequestHeader 未将请求 header 添加到 wcf 调用

转载 作者:太空宇宙 更新时间:2023-11-03 13:47:37 30 4
gpt4 key购买 nike

我正在尝试使用 ajax 调用 wcf 函数,如下所示:

$.ajax({
url:http://localhost:64121/Test.svc/json/GetNumber?X='+ var1 + '&callback=?',
dataType: 'json',
beforeSend : function(xhr) {
xhr.setRequestHeader("Authorization", "BasicAuthTest");
},
success: function(trackingData) {
alert("success");
}
});

WCF 代码正在发出信号并正在接收请求

public class CustomUserNameValidatorBasic : ServiceAuthorizationManager
{
protected override bool CheckAccessCore(OperationContext operationContext)
{
try
{
var msg = operationContext.RequestContext.RequestMessage;

// If user requests standart help-page then ignore authentication check.
if (msg.Properties.ContainsKey("HttpOperationName") && msg.Properties["HttpOperationName"].ToString() == "HelpPageInvoke")
{

return base.CheckAccessCore(operationContext);
}

var httpRequestHeaders = ((HttpRequestMessageProperty) msg.Properties[HttpRequestMessageProperty.Name]).Headers;

// Is Authorization-header contained in http-headers?
if (!httpRequestHeaders.AllKeys.Contains(HttpRequestHeader.Authorization.ToString()))
{
//code returns here
return false;
}

return false;

}
catch (Exception e)
{
return false;
}

}
}

如图所示,“授权” header 不包含在请求 header 数组中

enter image description here

在 Firebug 下的 ajax 请求的请求 header 中:

Request Headersview source Accept / Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5 Cache-Control max-age=0
Connection keep-alive Host test.proxyU.com If-Modified-Since Wed, 21 Mar 2012 19:46:56 GMT If-None-Match "e0818-17278-4bbc60dc86c00"
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:16.0)
Gecko/20100101 Firefox/16.0

更新:考虑到下面的答案,我尝试了下面的 3 种方法,但都没有添加标题。所有调用 wcf 都正确,但“授权” header 不在请求中。如果我看到 http 请求,标题看起来非常像我在上面发布的屏幕截图

方法一

$.ajax({
url: "http://localhost:64121/Test.svc/json/GetNumber?X='+ var1 + '&callback=?'",
beforeSend: function(xhr){xhr.setRequestHeader("Authorization", "BasicAuthTest");},
success: function(trackingData) {
alert("success");
}
});

方法二

$.ajax({
url: "http://localhost:64121/Test.svc/json/GetNumber?X='+ var1 + '&callback=?'",
headers: {"Authorization": "BasicAuthTest"},
success: function(trackingData) {
alert("success");
}
});

方法三

$.ajax({
url: "http://localhost:64121/Test.svc/json/GetNumber?X='+ var1 + '&callback=?'",
beforeSend : function(xhr, settings) {
$.extend(settings, { headers : { "Authorization" : "BasicAuthTest" } });
},
success: function(trackingData) {
alert("success");
}
});

最佳答案

来自 setRequestHeader() 上的文档

You must call setRequestHeader() after open(), but before send().

查看 jQuery source , open() 在 send() 上调用,所以你不能通过 beforeSend() 中的 xhr 对象设置 header

有关 header 的 $.ajax jQuery 文档说:

This setting is set before the beforeSend function is called; therefore, any values in the headers setting can be overwritten from within the beforeSend function.

因此您可以通过设置对象更新 beforeSend(xhr, settings) 中的 header ,jQuery 将获取它们。

$.ajax({
url:http://localhost:64121/Test.svc/json/GetNumber?X='+ var1 + '&callback=?',
dataType: 'json',
beforeSend : function(xhr, settings) {
$.extend(settings, { headers : { "Authorization", "BasicAuthTest" } }
},
success: function(trackingData) {
alert("success");
}
});

或者,您可以将 header 参数传递到 $.ajax() 调用中:

$.ajax({
url: ...,
headers : { "Authorization", "BasicAuthTest" }
};

关于c# - setRequestHeader 未将请求 header 添加到 wcf 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14760855/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com