我有一个web服务,在没有指定回调的情况下调用时,将返回一个使用JSON字符串application/json作为内容类型.
当指定回调时,它会将JSON字符串包装在回调函数中,因此它不再是真正有效的JSON.我的问题是,我应该像application/javascript这种情况一样服务还是仍然使用application/json?
我正在创建一个新的MVC4项目,研究让我相信现在通过Web API框架而不是控制器操作可以更好地实现从javascript到服务器端的通信.我的理解是否正确?
我假设我可以在Web API和MVC控制器之间共享所有属性等,所以面对它,对我来说似乎不是一个巨大的变化.
在设置应用程序时,我喜欢将组件拆分到项目中.我的计划是拥有一个MVC项目和一个Web API项目.但我遇到了问题.例如,我最终有2个应用程序,单独的路由设置等.
所以我的问题是,在MVC应用程序中,Web API框架应该位于同一个项目中,还是应该将Web API分离为自己的项目并解决问题?
我写了一个返回JSON的web服务,我试图用这样的jQuery调用它:
$.ajax({
contentType: "application/json; charset=utf-8",
url: "http://examplewebsite.com/service.asmx/GetData",
data: { projectID: 1 },
dataType: "jsonp",
success: function () {alert("success");}
});
Run Code Online (Sandbox Code Playgroud)
但是,尽管使用Fiddler查看HTTP流量时web服务调用成功,但代码从不调用成功函数.我认为这是因为我的Web服务正在返回原始JSON而不是JSONP.
如何生成JSONP作为标准.NET Web服务方法的响应,如下所示:
[WebMethod(), ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
public Project GetData(int projectID)
{
Project p = new Project();
p.Name = "foobar";
return p;
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
我刚刚开始使用MVC 4 Web API,我似乎误解了它是如何工作的.
在Web API之前,我有一个像这样的简单MVC操作方法:
public JsonResult User()
{
return Json(new
{
firstName = "Joe",
lastName = "Jacobs",
email = "joe.jacobs@gmail.com"
});
}
Run Code Online (Sandbox Code Playgroud)
那会很好.在新的Web API控制器中,我正在尝试做类似的事情.
public object User()
{
return new
{
firstName = "Joe",
lastName = "Jacobs",
email = "joe.jacobs@gmail.com"
}
}
Run Code Online (Sandbox Code Playgroud)
这会因序列化错误而失败:
'ObjectContent`1'类型无法序列化内容类型'application/xml的响应主体; 字符集= UTF-8' .
内部异常:
类型'<> f__AnonymousType1`3 [System.String,System.String,System.String]'无法序列化.请考虑使用DataContractAttribute属性对其进行标记,并使用DataMemberAttribute属性标记要序列化的所有成员.如果类型是集合,请考虑使用CollectionDataContractAttribute对其进行标记.有关其他受支持的类型,请参阅Microsoft .NET Framework文档.
关于从API控制器返回匿名类型我不明白的是什么?
我想将HTML表单发布到web-api.
如果我在其他域中使用jQuery执行ajax POST一切正常,我收到200 OK 但在firebug和response选项卡中我收到如下图所示的空白响应.这是我的jQuery代码:
var formData = new FormData($('form')[0]);
var response = '';
$.ajax({
url: 'http://localhost:2143/api/controller',
type: 'POST',
// Form data
data: formData,
//Options to tell JQuery not to process data or worry about content-type
cache: false,
contentType: false,
processData: false,
success : function(text)
{
response = text;
alert(response);
}
});
Run Code Online (Sandbox Code Playgroud)
请帮我...