Web API post 方法 URL 中没有参数(登录参数)

Web API post method without parameter in URL(Login parameter)

我在正文部分使用 WebAPI 中的 post 方法传递登录参数。我想在 URL(http: //localhost:3069/api/Login?username=admin&password=123) 中隐藏这些参数 (Username, Password) 但我只想要 url(http://localhost:3069/api/Login).

using SMSWebAPI.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;

namespace SMSWebAPI.Controllers {
    /// <summary>
    /// for login post api
    /// </summary>
    [RoutePrefix("api/Login")]
    public class LoginController: ApiController {
        private SMSApiEntities db = new SMSApiEntities();

        [HttpPost][Route("")]

        public IQueryable < object > Login(string username, string password) {
            var obj = (from p in db.UserLogins
            where p.LoginId == username && p.Password == password
            select p).FirstOrDefault();
            return db.UserLogins.Where(i = >i.LoginId.Equals(username) && i.Password.Equals(password));
        }
    }
}

expected result - http: //localhost:3069/api/Login
actual result - http: //localhost:3069/api/Login?username=admin&password=123

首先你需要创建一个新的class:

public class Model
{
    public string Username { get; set; }
    public string Password { get; set; }
}

然后你可以像这样使用[FromBody]:

[HttpPost]
public IQueryable<object> Login([FromBody] Model myModel)
{
    //Access properties here: myModel.Username
}

之后您可以将它们发送到您的请求正文中,然后网络 api 将通过模型活页夹接收它们。

您必须创建登录模型并在参数前添加 [FromBody]。因此,根据当前情况,您的模型将是。

public class LoginUser
{
    //Using Pascal Case for Properties
    public string Username { get; set; } 
    public string Password { get; set; }
}

函数是

[HttpPost]
public IQueryable<object> Login([FromBody] LoginUser UserCredentails)
{
   return db.UserLogins.Where(i => i.LoginId.Equals(UserCredentails.Username) && i.Password.Equals(password)).FirstOrDefault();
}