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 回答
0

过去对我有用的另一种可能性...您可能会考虑更改映射以包含控制器操作

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

然后将 ajax 方法中的 url 更改为 [controller]/[method]/。您还需要定义您的发布数据参数。

  $.ajax({
    url: "/api/Log/Post/", //--'Log' being the Controller, 'Post' being the method
    data: JSON.stringify({"msg":msg}),
    type: "POST",
    contentType: "application/json;charset=utf-8" 
});

希望有帮助。随时通知我们!

于 2013-09-20T12:55:56.337 回答