我创建服务器端项目(blazor服务器应用程序(,然后使用框架中内置的webapi
我在blazor服务器端中创建了一个用于登录的自定义webapi
查看我的代码:
namespace CrudBlazorServerApp.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class EmpsController : ControllerBase
{
private readonly sqldbcontext _context;
public EmpsController(sqldbcontext context)
{
_context = context;
}
//if i am comment PostEmp method then below method(checkLogin) work fine problem is both method not work at a time
[HttpPost]
public async Task<ActionResult<Emp>> PostEmp(Emp emp)
{
_context.emps.Add(emp);
await _context.SaveChangesAsync();
return CreatedAtAction("GetEmp", new { id = emp.empid }, emp);
}
//if i am comment checklogin method then above method(postemp) work fine
//custom login webapi
//[HttpPost]
//[Consumes("application/json")]
//public Emp checkLogin(string username, string password)
//{
// Emp hasemp = _context.emps.Where(e => e.username == username & e.password == password).FirstOrDefault();
// return hasemp;
//}
如果我评论checklogin方法,那么postemp工作正常,请查看此图像201创建
如果我取消注释checklogin方法,那么postemp不起作用,请参阅此图像204 NoContent
为什么webapi(postemp和checklogin(不能同时工作?
问题是因为两个方法都有相同的端点。因为您的路由配置是[Route("api/[controller]")]
,并且您的Actions标记为[HttpPost]
,这意味着您的端点将是api/Emps
,而不是api/Emps/PostEmp
或api/Emps/checkLogin
因此,您需要更改为以下其中一项才能使其工作:
选项1:
将您的路线更改为[Route("api/[controller]/[action]")]
,然后您的终点将是api/Emps/PostEmp
或api/Emps/checkLogin
选项2:
更改HttpPost以传递模板为[HttpPost("PostEmp")]
和[HttpPost("checkLogin")]
(这些名称可以更改为您喜欢的任何名称,而无需更改方法名称(