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();
}
我在正文部分使用 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();
}