我到处环顾四周,但找不到确切的答案。
我需要能够执行AJAX
POST并发送自定义标头。我对客户端脚本和服务器端服务都具有完全控制权,因此,如果需要对任何一方进行任何调整才能进行此工作,则可以进行这些更改。
我目前正在使用jQuery,但是,如果jQuery无法做到这一点,并且我需要使用另一个完全没有问题的库。理想情况下,我宁愿坚持使用单个库(jQuery),但如果能解决我的问题,我很乐意使用第二个库。
目前,我的代码如下所示:
$.ajax({
type: 'POST',
url: 'http://localhost:65079/TestHandler',
crossDomain: true,
data: myVariableOfData,
dataType: 'json',
beforeSend: function(xhr) {
xhr.setRequestHeader('MessageId', 'abc123');
},
success: function(responseData, textStatus, messageId) {
console.log("success");
},
error: function(responseData, textStatus, errorThrown) {
console.log(textStatus);
console.log(responseData);
console.log(errorThrown);
}
});
不幸的是,jQuery甚至没有尝试将请求发送到服务器,但是,一旦我删除了标头,它就会发送请求。我确实需要这些标头,因此我们将不胜感激。
请问我任何可能有助于解决此问题的问题,我将尽我所能尽快做出答复。
我不知道您是否还在寻找实现此目的的方法。可以做到的。这是一个示例CORS处理程序
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace Api.Handlers
{
/// <summary>
///
/// </summary>
public class CorsHandler : DelegatingHandler
{
const string Origin = "Origin";
const string AccessControlRequestMethod = "Access-Control-Request-Method";
const string AccessControlRequestHeaders = "Access-Control-Request-Headers";
const string AccessControlAllowOrigin = "Access-Control-Allow-Origin";
const string AccessControlAllowMethods = "Access-Control-Allow-Methods";
const string AccessControlAllowHeaders = "Access-Control-Allow-Headers";
/// <summary>
///
/// </summary>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
bool isCorsRequest = request.Headers.Contains(Origin);
bool isPreflightRequest = request.Method == HttpMethod.Options;
if (isCorsRequest)
{
if (isPreflightRequest)
{
HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
response.Headers.Add(AccessControlAllowOrigin, request.Headers.GetValues(Origin).First());
string accessControlRequestMethod = request.Headers.GetValues(AccessControlRequestMethod).FirstOrDefault();
if (accessControlRequestMethod != null)
{
response.Headers.Add(AccessControlAllowMethods, accessControlRequestMethod);
}
string requestedHeaders = string.Join(", ", request.Headers.GetValues(AccessControlRequestHeaders));
if (!string.IsNullOrEmpty(requestedHeaders))
{
response.Headers.Add(AccessControlAllowHeaders, requestedHeaders);
}
TaskCompletionSource<HttpResponseMessage> tcs = new TaskCompletionSource<HttpResponseMessage>();
tcs.SetResult(response);
return tcs.Task;
}
return base.SendAsync(request, cancellationToken).ContinueWith<HttpResponseMessage>(t =>
{
HttpResponseMessage resp = t.Result;
resp.Headers.Add(AccessControlAllowOrigin, request.Headers.GetValues(Origin).First());
return resp;
});
}
return base.SendAsync(request, cancellationToken);
}
}
}
添加此代码后,然后在Application_Start方法内的Global.asax文件中注册处理程序。
GlobalConfiguration.Configuration.MessageHandlers.Add(new CorsHandler());
现在,您可以发送请求标头。希望有帮助。已通过Web API,MVC 4以及来自Google Chrome和Firefox的站点进行了测试。
问题内容: 由于您无法在JSONP调用上应用自定义标头,因此如何发出跨域请求并使用jQuery应用自定义标头? 我基本上是想使用jQuery访问google文档,并且需要传递身份验证令牌: 注意:这样做的目的是 完全 绕开应用程序层。使用ruby连接到Google Data API很简单,但是在服务器端始终解析提要会占用大量资源。 问题答案: 您可以使用Google的JavaScript客户端库来
问题内容: 我只是开始看一下Mattt出色的新Alamofire快速联网库,并且不确定如何将其与自定义标头一起使用。 我正在尝试从AFNetworking转换为Alamofire的代码是这样的: 问题答案: 根据官方文档,不建议修改会话配置: 不建议将其用于Authorization或Content- Type标头。而是分别使用URLRequestConvertible和ParameterEnco
问题内容: 使用$ http,我们可以这样做: 我想用$ resource引用做同样的事情(不起作用): 与这样声明的相应服务: 它不起作用:config对象转到url而不是http标头。 有没有办法做到这一点 ? 问题答案: 对于是因为AngularJS 1.1.1可用。确保您使用了正确的版本。 格式为 [以上内容似乎不正确。$ resource的第三个参数应该不同。这对我来说似乎更正确:
问题内容: 谁能告诉我如何在跨域jsonp调用的jquery中使用ajax调用添加自定义标头。我正在使用ajax跨域调用的html页面中调用web服务。为此使用jsonp,现在我必须在标头中发送一些参数,因此我如何设置标题。 问题答案: 恐怕这是不可能的。jQuery使用JSONP标签,并且您知道,您无法使用此标签设置自定义标头。作为一种可能的解决方法,您可以在域上编写服务器端脚本,该脚本将充当域
问题内容: 我想知道是否/如何在PHP中将自定义标头添加到cURL HTTP请求。我正在尝试模拟iTunes如何捕获图片并使用以下非标准标头: 如何将这些标头添加到请求中? 问题答案: http://www.php.net/manual/zh/function.curl- setopt.php
问题内容: 我正在尝试使用Axis使用.NET 2.0 Web服务。我使用Eclipse WST插件生成了Web服务客户端,到目前为止看来还可以。 这里是预期的SOAP标头: 我没有找到有关如何从Axis客户端配置此标头的任何文档。当我使用Visual Studio C#Express 2008生成客户端时,它会生成一个具有两个String属性(和)的类,并且所有客户端方法都将此类的对象作为第一个