我在使用MS WebAPI和ExtJS
时遇到问题ExtJS从
进行API调用proxy : {
type : 'ajax',
noCache: false,
pageParam: false,
startParam: false,
limitParam: false,
extraParams: {
param1 : var1,
param2 : var2,
},
api: {
read : 'api/DataSource',
},
我的Web API应用程序返回XML(我可以在FireBug中看到它。)
[System.Web.Http.AcceptVerbs("GET", "POST")]
[System.Web.Http.HttpGet]
public DataModel DataSource(int debug=0)
{
DataSource dataSource = new dataSource();
...
return dataSource
}
我能想到的原因只有一个,为什么会返回xml: Firefox不会在此ExtJS json调用中专门请求application / json。 如果我将Firefox的默认AcceptHeaders更改为更友好的json,则返回JSON。
由于用户不必更改浏览器设置,我看到两种解决方案:
- >告诉Javascript要求申请/ json。
- >或者告诉MS总是返回json。
我更喜欢选项1,但我不知道是否或如何更改此选项?
答案 0 :(得分:1)
当您能够控制传递给Ajax请求的内容时,您可以覆盖每个请求的标头:
Ext.Ajax.request({
url: '...',
headers: { 'Accept': 'application/json' },
params: { ... },
...
});
当您无法控制请求时(即它间接地被称为商店/代理/等等层),您必须深入了解API,看它是否允许您自定义请求的参数。在这种情况下,Ext.data.proxy.AjaxProxy
类允许您传递自定义标题:
proxy : {
type : 'ajax',
headers: { 'Accept': 'application/json' }, // or whatever you need
...
}
我不想在整个地方做到这一点,所以我决定通过覆盖defaultHeaders
单身人士课程来单独表达自己的Ext.Ajax
:
Ext.define('MyApp.overrides.core.Ajax', {
override: 'Ext.Ajax',
defaultHeaders: {
'Accept': '*/*' // or whatever you need if this is too liberal
}
});
然后,您必须确保在应用程序引导时加载此类。这样做会影响每个Ajax请求,甚至是框架代码通过Ext.Ajax
模块做出的请求。您的里程可能因此解决方案而异。
答案 1 :(得分:0)
清除配置对象上的formatters集合,然后添加回JsonMediaTypeFormatter。