【问题标题】:MVC 4 Web API 2 ajax call all parameters optionalMVC 4 Web API 2 ajax 调用所有参数可选
【发布时间】:2016-02-12 08:01:12
【问题描述】:

我真的想要你的选择。 我们使用 web api 2 将 .net MVC 3 项目更新为 MVC 4,这是一个 web 服务。 ajax 调用来自具有 Devextreme/Phonegap 的 android 机器。

更新网络服务后,当我从 android 调用登录时,我得到 "未找到与请求 URI 'http://www.whatever.gr/MVCService/Actions/Login' 匹配的 HTTP 资源"

我想设置路由,以便 MVC 服务的所有方法都可以有参数可选。 我无法完成这项工作..

android 应用上不能改源码,ajax 调用如下代码

function doLogin(username, password, callback) {
    loading(true);

    var dataStr = "uid=" + uid + "&username=" + username + "&password=" + password;
    var success = false;
    var token = "";
    $.ajax({
        type: "POST",
        url: registrationServiceUrl + 'Login',
        data: dataStr,
        beforeSend: function () {
            //alert("registration no: " + registrationid);
        },
        success: function (retval) {
            if (retval.indexOf('SUCCESS') == 0) {
                success = true;
                token = retval.substring(8);
                //setTokenToSettings(token); 
            } else {
                success = false;
            };
            callback(success, token);
            loading(false);

        },
        error: function (retval) {
            callback(success, token);
            loading(false);

        }
    });
}

MVC中的路由是

 public static void Register(HttpConfiguration config)
            {
                // Web API configuration and services

                // Web API routes
                //config.MapHttpAttributeRoutes();

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

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

当我在浏览器中使用以下参数点击时,我得到了响应 'http://www.whatever.gr/MVCService/Actions/Login?param1=1&param=2&param3=3'。

我想要这种行为,何时点击“http://www.whatever.gr/MVCService/Actions/Login” 要么 'http://www.whatever.gr/MVCService/Actions/Login?param1=1&param=2&param3=3&invalidParamName=x'。

以及使用空参数值触发的 Web 服务方法。

但没有在方法中设置可选参数

public string Login(string pamar1 = "",string param2 = "", string param3 = "")

正如我之前解释的那样,使用 MVC 3 可以正常工作。

提前感谢您的宝贵时间。

【问题讨论】:

  • 您好,我认为这与您的客户端应用程序无关。不久前我遇到了同样的问题。请看一下这篇帖子。stackoverflow.com/questions/19093603/simple-post-to-web-api/… 并在这个问题中查看其背后的原因stackoverflow.com/questions/19424493/…
  • 我试过 [HttpGet(), HttpPost()] public JsonResult Login([FromBody]string uid, [FromBody]string username, [FromBody]string password) 但我得到一个错误发生了
  • 我认为这是 ajax 调用 data: dataStr $.ajax({ type: "POST", url: registrationServiceUrl + 'Login', data: dataStr, 但这在 MVC 3 上是如何工作的??
  • 你不能使用多个 [FormBody] 属性

标签: android ajax asp.net-mvc asp.net-mvc-4 iis-7


【解决方案1】:

在 Web API 中,记住参数绑定是如何发生的非常简单。

  • 如果你POST简单类型,Web API 会尝试从 URL 绑定它
  • 如果你POST复杂类型,Web API 会尝试从 请求(这使用媒体类型格式化程序)。

这个 asp.net 页面解释了这一切。 http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-09
    • 2016-11-09
    • 1970-01-01
    相关资源
    最近更新 更多