0

同僚と私は、knockoutjs (Umbraco CMS 経由) を使用して通信している Web API に取り組んでいます。ブラウザーに組み込まれているクロス サイト スクリプティング セキュリティに遭遇するのを避けるために、Web サイト ディレクトリの仮想ディレクトリに API を配置しています。

ディレクトリに「愚かな」html ファイルを配置すると、API と問題なく「対話」できます。一方、umbraco から仮想ディレクトリ内の API を参照しようとしても、それは見つかりません。

私はさまざまな解決策を探しましたが、すべてではないにしても、ほとんどの場合、解決策が実際には役に立たない MVC3 を使用している場合です。

API に接続しようとする JavaScript の一部を次に示します。

function subscribe() {
  if($("#siteForm").valid()=== true){
    alert("add subscriptiooncalled");
    var mySubscription = ko.toJS(ViewModel);
    var json = JSON.stringify(mySubscription);
    alert(json);
    $.ajax({
        url: API_URL,
        cache: false,
        type: 'POST',
        contentType: 'application/json',
        data: json,  
        success: function (data) {
            alert("data is pushed");
        },
        error: function (error) {
            alert("ERROR STATUS: " + error.status + "  STATUS TEXT: " + error.statusText);
        }

    });
  }else{

  }
}

これを行ってもうまくいきません:

var root = location.protocol + "//" + location.host;
var API_URL = root + "/api/Subscriptions/";

アラートはテスト目的であることに注意してください。とにかく、コード内の URL は明らかに機能せず、完全な URL を挿入しても機能しません (http:// など)。

助言がありますか?役立つ場合は、Umbraco 4.7.2 を使用します。

編集 編集 編集 編集 編集 まあ、これはばかげています。いくつかの異なるソリューションの集大成かもしれませんし、そうでないかもしれませんが、すべて送信ボタンに行き着きました。うん。ボタンのタイプを「送信」から「ボタン」に変更すると、すべてが機能しました。ああ、これはばかげていた。

4

2 に答える 2

0

API へのパスを、サイトの web.config の「umbracoReservedPaths」appSetting に追加する必要があります。これにより、そのパスを処理から除外するよう umbraco に指示されます。Jonas Ericsson は、彼が書いたブログ投稿で、これを行う方法の良い例を示しています。

于 2013-02-26T14:27:00.390 に答える
-1

あなたの問題は、WebApi ルートが Umbraco によってオーバーライドされていることです。

WebApi と Umbraco を並べて配置するには (Umbraco 4.11 で) IApplicationEventHandler を実装する必要がありますが、残念ながら 4.7 ではこれは機能せず、別のものを使用する必要があります (メモリが機能する場合は ApplicationBase から継承します)。Umbraco 4.11+ に必要なコードは、次のようになります。

public class WebApiStartupHandler : IApplicationEventHandler
{
    public void OnApplicationStarted(UmbracoApplication httpApplication, ApplicationContext applicationContext)
    {
        WebApiConfig.Register(GlobalConfiguration.Configuration); // register web api routes
        RouteConfig.RegisterRoutes(RouteTable.Routes);            // register mvc routes
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); // register global filters
    }
}

これにより、webapi プロジェクトを umbraco Web サイトと並行して実行できるようになり、仮想ディレクトリを使用する必要がなくなります。

web.config ファイルの appConfig セクションの umbracoReservedUrls と umbracoReservedPaths に "~/api" (または API ルートとして使用したいもの) を追加すると、特に仮想ディレクトリで API を実行する必要がある場合に、問題が解決する場合があります。 .

于 2013-02-26T14:58:27.987 に答える