【问题标题】:WebAPI POST method argumentsWebAPI POST 方法参数
【发布时间】:2018-01-13 16:30:59
【问题描述】:

我有一个 ASP.NET WebAPI 项目。在某个控制器中有一个 post 动作,它接受一个参数 [FromBody]。当我在本地调试项目时,接收到的参数很好,但是当我发布同一个项目时,接收到的参数为空。相同的 WebAPI 项目,相同的 JavaScript 客户端调用该操作。

Javascript (jQuery) 请求:

var myRequest = $.ajax({
            type: 'POST',
            url: globalRoot + '/api/afternoonvisitcall',
            data: AfternoonVisitCalls,
            dataType: "text",
            success: function (resultData) {
                // resultData is false (for Published application)
            },
            error: function (error) {

            }
        });

CS 控制器:

public class AfternoonVisitCallController : ApiController
{
   public IEnumerable<string> Get(){...}
   public object Get(string id){...}
   public bool Post([FromBody]VisitList AfternoonVisitCalls)
   {
        if (AfternoonVisitCalls != null)
        {
            Logger.Log("In POST api/afternoonvisitcall",
                         Logger.files.WebAPI_log,
                         " input arg AfternoonVisitCalls is NOT null");

            return AfternoonVisitCalls.SaveAfternoonListWithSamples();
        }
        else
        {
            Logger.Log("In POST api/afternoonvisitcall",
                         Logger.files.WebAPI_log,
                         " input arg AfternoonVisitCalls is NULL");
        }
        return false;
    }
}

CS RouteConfig.cs 文件:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}

CS WebApiConfig.cs 文件:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.Routes.MapHttpRoute(
           name: "myRoute",
            routeTemplate: "api/{controller}/{action}/{id}/{date}",
           defaults: new { id = RouteParameter.Optional }
       );

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

在其他控制器中甚至还有其他后期操作,它工作正常。我不知道为什么会这样,我的想法已经不多了。任何帮助表示赞赏。谢谢。

【问题讨论】:

  • 没有更多信息很难找到答案。请阅读How to create a Minimal, Complete, and Verifiable example
  • 好像反序列化body数据有问题。 VisitList 的班级看起来怎么样?我不确定,但为了测试,应该可以将Post 方法的参数类型更改为String。然后你应该看到发送了什么数据以及它是如何格式化的。
  • 发布到哪里?您标记了 IIS6。已报废,不支持。升级您的网络服务器。
  • @ADyson 我希望我可以,它是一个生产服务器,我对此事没有发言权

标签: c# asp.net asp.net-mvc asp.net-web-api iis-6


【解决方案1】:

成功了!我不确定如何,但我设置了 contentType: "application/json; charset=utf-8" 和 data as data: JSON.stringify(avc_obj),而不是对象本身,在 AJAX 请求中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-30
    • 1970-01-01
    • 2013-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    相关资源
    最近更新 更多