i have created an asp.net core web api and the controller works fine in development but when have published it to an iis server i get error 405
what could be the reason even after removing WebDAV module still gives the same error
what could be the reason for this error
here's my controller code :
[Route("api/[controller]")] [ApiController] public class AuthenticationController : ControllerBase { private readonly UserManager<IdentityUser> _userManager; private readonly SignInManager<IdentityUser> _signInManager; private readonly RoleManager<IdentityRole> _roleManager; private readonly IEmailService _emailService; private readonly IConfiguration _configuration; public AuthenticationController(UserManager<IdentityUser> userManager, RoleManager<IdentityRole> roleManager, IEmailService emailService, SignInManager<IdentityUser> signInManager, IConfiguration configuration) { _userManager = userManager; _roleManager = roleManager; _signInManager = signInManager; _emailService = emailService; _configuration = configuration; } [H ttpPost] public async Task<IActionResult> Register([FromBody] RegisterUser registerUser, string role) { //Check User Exist var userExist = await _userManager.FindByEmailAsync(registerUser.Email); if (userExist != null) { return StatusCode(StatusCodes.Status403Forbidden, new Response { Status = "Error", Message = "User already exists!" }); } //Add the User in the database IdentityUser user = new() { Email = registerUser.Email, SecurityStamp = Guid.NewGuid().ToString(), UserName = registerUser.Username, TwoFactorEnabled=true }; if (await _roleManager.RoleExistsAsync(role)) { var result = await _userManager.CreateAsync(user, registerUser.Password); if (!result.Succeeded) { return StatusCode(StatusCodes.Status500InternalServerError, new Response { Status = "Error", Message = "User Failed to Create" }); } //Add role to the user.... await _userManager.AddToRoleAsync(user, role); //Add Token to Verify the email.... var token = await _userManager.GenerateEmailConfirmationTokenAsync(user); var confirmationLink = Url.Action(nameof(ConfirmEmail), "Authentication", new { token, email = user.Email }, Request.Scheme); var message = new Message(new string[] { user.Email! }, "Confirmation email link", confirmationLink!); _emailService.SendEmail(message); return StatusCode(StatusCodes.Status200OK, new Response { Status = "Success", Message = $"User created & Email Sent to {user.Email} SuccessFully" }); } else { return StatusCode(StatusCodes.Status500InternalServerError, new Response { Status = "Error", Message = "This Role Doesnot Exist." }); } } [H ttpGet("ConfirmEmail")] public async Task<IActionResult> ConfirmEmail(string token, string email) { var user = await _userManager.FindByEmailAsync(email); if (user != null) { var result = await _userManager.ConfirmEmailAsync(user, token); if (result.Succeeded) { return StatusCode(StatusCodes.Status200OK, new Response { Status = "Success", Message = "Email Verified Successfully" }); } } return StatusCode(StatusCodes.Status500InternalServerError, new Response { Status = "Error", Message = "This User Doesnot exist!" }); } [H ttpPost] [Route("login")] public async Task<IActionResult> Login([FromBody] LoginModel loginModel) { var user = await _userManager.FindByNameAsync(loginModel.Username); if (user.TwoFactorEnabled) { await _signInManager.SignOutAsync(); await _signInManager.PasswordSignInAsync(user, loginModel.Password, false, true); var token = await _userManager.GenerateTwoFactorTokenAsync(user, "Email"); var message = new Message(new string[] { user.Email! }, "OTP Confrimation", token); _emailService.SendEmail(message); return StatusCode(StatusCodes.Status200OK, new Response { Status = "Success", Message = $"We have sent an OTP to your Email {user.Email}" }); } if (user!=null && await _userManager.CheckPasswordAsync(user,loginModel.Password)) { var authClaims = new List<Claim> { new Claim(ClaimTypes.Name, user.UserName), new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()), }; var userRoles = await _userManager.GetRolesAsync(user); foreach (var role in userRoles) { authClaims.Add(new Claim(ClaimTypes.Role, role)); } var jwtToken = GetToken(authClaims); return Ok(new { token = new JwtSecurityTokenHandler().WriteToken(jwtToken), expiration = jwtToken.ValidTo }); //returning the token... } return Unauthorized(); } [H ttpPost] [Route("login-2FA")] public async Task<IActionResult> LoginWithOTP(string code,string username) { var user = await _userManager.FindByNameAsync(username); var signIn= await _signInManager.TwoFactorSignInAsync("Email", code, false, false); if (signIn.Succeeded) { if (user != null ) { var authClaims = new List<Claim> { new Claim(ClaimTypes.Name, user.UserName), new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()), }; var userRoles = await _userManager.GetRolesAsync(user); foreach (var role in userRoles) { authClaims.Add(new Claim(ClaimTypes.Role, role)); } var jwtToken = GetToken(authClaims); return Ok(new { token = new JwtSecurityTokenHandler().WriteToken(jwtToken), expiration = jwtToken.ValidTo }); //returning the token... } } return StatusCode(StatusCodes.Status404NotFound, new Response { Status = "Success", Message = $"Invalid Code" }); } private JwtSecurityToken GetToken(List<Claim> authClaims) { var authSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["JWT:Secret"])); var token = new JwtSecurityToken( issuer: _configuration["JWT:ValidIssuer"], audience: _configuration["JWT:ValidAudience"], expires: DateTime.Now.AddDays(2), claims: authClaims, signingCredentials: new SigningCredentials(authSigningKey, SecurityAlgorithms.HmacSha256) ); return token; } }
thanks