我已閱讀了一些articlesarticles,詳細說明了如何使用JSONP和MVC4(我正在使用RC版本)以及新的Web Api。我正在嘗試執行跨域請求。我不知道我做錯了什麼。我的控制器是從MVC4中的ApiController類繼承而來的。我嘗試了Rick Strahl的實施和其他幾個人。這裏是我的示例方法:JSONP跨域使用MVC4和新的Web API請求結果405或500錯誤
public string StartTracking(string apiKey, DomainTracking domainTracking)
{
var user = _userService.GetByApiKey(apiKey);
if(user != null)
{
var domain = user.Domains.FirstOrDefault(d => d.Name.ToLower() == domainTracking.Domain.Name.ToLower());
if(domain != null)
{
domainTracking.DomainId = domain.Id;
domainTracking.Domain = domain;
domainTracking.CreatedById = user.Id;
domainTracking.ModifiedById = user.Id;
var newDomainTracking = _domainTrackingService.Create(domainTracking);
return newDomainTracking.Id.ToString();
}
}
else
{
throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFound));
}
throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFound));
}
這裏是我的jQuery的請求代碼:
function getSessionKey() {
var Domain = { 'Name': domainName };
var DomainTracking = { 'Domain': Domain, 'FormElements': getFormElements(), 'ClientLocation': clientLocation };
$.ajax({
url: 'http://api.testdomain.com:4646/api/' + apiKey,
type: 'GET',
cache: false,
timeout: 100000,
data: DomainTracking,
dataType: "jsonp",
error: function (xhr, status, error) {
},
success: function (data) {
sessionKey = data;
}
});
}
如果我改變方法名GetStartTracking是收到一個500錯誤。如果我留下名稱StartTracking,我會得到一個405不允許的錯誤。我需要做什麼?
我有一個路由設置來獲取api/{apikey}。這不行嗎? – DDiVita 2012-08-14 16:14:49
是的,這取決於路線設置,可以工作。你的路線是什麼樣子?我認爲你仍然必須傳遞查詢字符串中的所有其他信息,如果它的跨域。 – fowlermatthewd 2012-08-14 16:17:26
我明白你現在在說什麼。我會試驗這個,看看它是否工作 – DDiVita 2012-08-14 16:22:35