在webapi中为Action使用dynamic参数实现Post方式调用

原文:在webapi中为Action使用dynamic参数实现Post方式调用

1.在webapi中使用controller/action/id的路径配置,打开文件[App_Start] -[WebApiConfig]

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

 

2.直接使用[HttpPost]过滤器,为action添加实现方法:

[HttpPost]
// POST api/<controller>
public string AdminLogin(string userName,string passWord)
{
  return "";
}

  产生的问题:前端将“type”改为“Post”方式,无论如何都获取不到该方法。

3.解决方案一:

①添加中转的对象类,用于存储参数。

    public class AdminLogin
    {
        public string UserName { get; set; }

        public string PassWord { get; set; }
    }

②修改action参数配置。

      [HttpPost]
        // POST api/<controller>
        public string AdminLogin([FromBody]AdminLogin adminLogin)
        {
           return adminLogin.UserName;
        }

③前端调用方法:

      $.ajax({

            type: "POST", url: AdminApi.AdminLogin,
       data: {UserName:"xxx",PassWord:"XXX"},
       success: function (data) {
           //处理方法

            }
        });

  

  

4.解决方案二:

①修改action参数为dynamic及方法调用:

      [HttpPost]
        // POST api/<controller>
        public string AdminLogin([FromBody]dynamic adminLogin)
        {
            string userName = adminLogin.UserName;
            string passWord = adminLogin.PassWord;
            return  userName;
        }

②修改前端调用方式:

        var obj = { UserName: username, PassWord: password };

        //调用api验证方法
        $.ajax({

            type: "POST", url: AdminApi.AdminLogin,
       data: JSON.stringify(obj), contentType: "application/json",
       success: function (data) {
             //内部实现方法

            }
        });

  

  

 

原文地址:https://www.cnblogs.com/lonelyxmas/p/11125462.html

时间: 2024-10-08 11:28:50

在webapi中为Action使用dynamic参数实现Post方式调用的相关文章

Struts2学习笔记(六)——Action处理请求参数

在struts2框架中关于Action处理请求参数有两种方案(三个方式),表单属性的名称应该和在Action类中定义的成员属性或者在JavaBean中定义的成员属性名称一样: 1.属性驱动 1)直接在Action类中定义成员属性来接收请求参数 (将Action当成javaBean),在Action中还需要定义成员属性的setter方法. 表单信息: 1 <form action="${pageContext.servletContext.contextPath}/testAction.ac

Action获取请求参数的3中方式

方式一:Action本身作为Model对象,通过属性注入(Setter)方法讲参数数据封装到Action中 具体为:在Action中,提供和参数名相同的几个属性,并为其提供set方法,那么,该参数会被自动封装 到该几个属性中. 方式二:创建独立的Model对象,还是通过属性注入的方法将请求数据封装到Model对象中 具体为:另外创建一个专门的类,并在其中添加几个和请求参数名相同的属性,,此时,在表单中,需要讲参数名, 写成Model的一个具体对象名.参数名的方式,然后在Action中,需要定义一

关于mvc、webapi中get、post、put、delete的参数

webapi中post提交的数据必须是一个类,get提交的数量无所谓 多种参数get时,参数名不能相同: 在能通过c#的校验的前提下,参数名.参数数量不能全完相同 public string Get(int page, int pagesize) { return "test1"; } public string Get(int page) { return "test2"; } 这是没问题的 public string Get(int page, int page

再说表单验证,在Web Api中使用ModelState进行接口参数验证

写在前面 上篇文章中说到了表单验证的问题,然后尝试了一下用扩展方法实现链式编程,评论区大家讨论的非常激烈也推荐了一些很强大的验证插件.其中一位园友提到了说可以使用MVC的ModelState,因为之前通常都在Web项目中用没在Api项目用过,想想Api方法接收的多参数都封装成了一个实体类,独立于数据Model层,这样其实很方便用ModelState做验证,于是尝试了一下. 认识ModelState 我们都知道在MVC中使用ModelState实现表单验证非常简单,借助jquery.validat

Asp.Net WebAPI中Filter过滤器的使用以及执行顺序

转发自:http://www.cnblogs.com/UliiAn/p/5402146.html 在WEB Api中,引入了面向切面编程(AOP)的思想,在某些特定的位置可以插入特定的Filter进行过程拦截处理.引入了这一机制可以更好地践行DRY(Don’t Repeat Yourself)思想,通过Filter能统一地对一些通用逻辑进行处理,如:权限校验.参数加解密.参数校验等方面我们都可以利用这一特性进行统一处理,今天我们来介绍Filter的开发.使用以及讨论他们的执行顺序. Filter

在asp.net WebAPI 中 使用Forms认证和ModelValidata(模型验证)

一.Forms认证 1.在webapi项目中启用Forms认证 Why:为什么要在WebAPI中使用Forms认证?因为其它项目使用的是Forms认证. What:什么是Forms认证?它在WebAPI中就是一个MessageHandle,具体请查找关键字“ASP.NET Forms” How:如何启动Forms认证? 最简单的是通过配置启动Forms认证: 1 <system.web> 2 <authentication mode="Forms"> 3 <

http中 get方法 传送中文参数乱码解决办法

http传送参数有两种方法:get 和post  当时使用get方法传递中文参数是会有乱码现象 解决办法: 1.在jsp压面url后面的参数使用 encodeURI:"&zxbghy="+ encodeURI(zxbghy) 2.在后台java获取参数时使用字节数组:temphgdmhy = new String(hgdmhy.getBytes("ISO-8859-1"), "UTF-8");  案例,用get方法传递两个中文参数:zxb

Spring中的AOP(五)——在Advice方法中获取目标方法的参数

摘要: 本文介绍使用Spring AOP编程中,在增强处理方法中获取目标方法的参数,定义切点表达式时使用args来快速获取目标方法的参数. 获取目标方法的信息 访问目标方法最简单的做法是定义增强处理方法时,将第一个参数定义为JoinPoint类型,当该增强处理方法被调用时,该JoinPoint参数就代表了织入增强处理的连接点.JoinPoint里包含了如下几个常用的方法: Object[] getArgs:返回目标方法的参数 Signature getSignature:返回目标方法的签名 Ob

MVC中URL传多个参数

1.mvc中url传递多个参数不能直接使用&,会报错(从客户端(&)中检测到有潜在危险的 Request.Path 值) 方法①:使用?---/Home/Index/?id=xxx&name=xxx(js:"/MsgTypeTem/Edit/?id=" + temId + "&flag=" + Math.random()) 方法②:修改路由规则--- routes.IgnoreRoute("{resource}.axd/{*