1

すべての JavaScript 呼び出しで機能するロギング メソッドを作成しようとしています。うまくいっていません。次のエラーが表示されます。

要求に一致するアクションがコントローラーの「ログ」に見つかりませんでした。

コントローラーに次のコードがあります。

[System.Web.Mvc.HttpPost]
        public void Post(string msg)
        {
            using (var ctx = new DataClassesDataContext(ConfigurationManager.ConnectionStrings["EasyViewDkConnectionString"].ToString()))
            {
                ctx.UserInputInsert(msg, HttpContext.Current.Request.UserHostAddress);
            }
        }

とてもシンプルです。私のルーティングが問題なのかどうかは少しわかりません。基本的に、私はデフォルトのルートを持っています:

config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

データを投稿するには、次の JavaScript を使用しています。

function Log(msg) {
    $.ajax({
        url: "/api/Log/",
        data: msg,
        type: "POST",
        contentType: "application/json;charset=utf-8"
    });
}

明らかに、私は何か間違ったことをしています。おそらく私のルーティングですが、解決できないようです。コントローラーの msg 引数を id に変更しようとしましたが、それでも同じです。

4

2 に答える 2

2

私はしばらくの間グーグルで調べていましたが、この記事に出くわしました: http://encosia.com/using-jquery-to-post-frombody-parameters-to-web-api/

文字列などのプリミティブ値を投稿すると、Web Api はそれをあまり好まないことがわかりました。機能させるには、投稿時にパラメーターに追加[FromBody]し、値の名前も空白にする必要があります。

そのため、コードを少し変更したところ、次のようになり、機能するようになりました。

Javascript:

function Log(msg) {
    $.post("/api/Log", { "": msg });
}

そして私のコントローラー:

[System.Web.Http.HttpPost]
        public HttpResponseMessage Post([FromBody]string value)
        {
            using (var ctx = new DataClassesDataContext(ConfigurationManager.ConnectionStrings["EasyViewDkConnectionString"].ToString()))
            {
                ctx.UserInputInsert(value, HttpContext.Current.Request.UserHostAddress);
            }

            return new HttpResponseMessage(HttpStatusCode.OK);
        }
于 2013-09-21T11:43:54.953 に答える