1

私はMVC4(私はRCバージョンを使用しています)と新しいWebApiでJSONPを使用する方法を詳しく説明しているいくつかの記事を読みました。クロスドメインリクエストを実行しようとしています。何が間違っているのかわかりません。私のコントローラーはMVC4のApiControllerクラスから継承しています。RickStrahlの実装と他のいくつかを試しました。これが私の例の方法です:

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という名前を残すと、405notallowedエラーが発生します。私は何をする必要がありますか?

4

2 に答える 2

3

メソッドの名前として「Get」を使用してみてください。JSONPは投稿で機能しない可能性があるため、データはすべてURLに含まれている必要があります。ajax関数のdata属性を使用できるとは思いません。

これは役立つかもしれません

パブリッククラスTrackingController:ApiController {

... public string Get(string apiKey、string Domain、string FormElements、string ClientLocation){

//ここですべてを行う

}

}

リクエストのURLには、コントローラーの名前とURL内のすべての情報が含まれている必要があります。それを行う他の方法があるかもしれませんが、これはうまくいくはずです。

http://api.testdomain.com:4646/api/ Tracking /?apiKey = something&Domain = abc&FormElements = 1,2,3&ClientLocaiton = somewhere

于 2012-08-14T16:01:59.913 に答える
0

jsonpのMediaTypeFormatterが欠落している可能性があります。

このためのサンプルプロジェクトを作成しました。これはTelerikKendoUI機能を使用していますが、クロスドメインプロセスは何があっても同じです。サンプルアプリケーションは、http ://www.kendoui.c​​om/code-library/mobile/listview.aspxからダウンロードできます。

また、Apiメソッドの前に「Get」を付けるか、[HttpGet]属性をメソッドに追加する必要があります。

これがお役に立てば幸いです。

于 2012-08-25T18:25:20.743 に答える