Application exception when trying to get response from server

Surya Chandra Mohan 20 Reputation points
2024-04-29T07:21:39.1033333+00:00

Register.cshtml

1.

   
                      
   ``````xml
            <button type="submit" class="btn btn-outline-primary btn-sm ml-4 mt-4" asp-page-handler="GenerateOtp" style=" width: 150px;" disabled="@Model.OtpProcessing">
                                   @if (Model.OtpProcessing)
                                   {
                                       <div class="spinner-border spinner-border-sm" role="status">
                                           <span class="visually-hidden">Loading...</span>
                                       </div>
                                       <span>GENERATING</span>
                                   }
                                   else
                                   {
                                       <span>GENERATE OTP</span>
                                   }
                               </button>

Register.cshtml.cs

public void OnGet()
{
if (!string.IsNullOrEmpty(LoginPhoneNumber))
{
    IsPhoneNumberPresent = true;
    //LoginModel = new OtpRegisterVm { Username = LoginPhoneNumber, CountryCode = CountryCode };
}
else
{
    IsPhoneNumberPresent = false;
}
}
public async Task<IActionResult> OnPostGenerateOtpAsync()
{
OtpProcessing = true;
if (string.IsNullOrEmpty(LoginModel.Username))
{
    Notify.Add(TempData, false, "", "Phone Number required");
    OtpProcessing = false;
    return Page();
}
else if (LoginModel.Username.Length < 10)
{
    Notify.Add(TempData, false, "", "Enter valid Phone Number");
    OtpProcessing = false;
    return Page();
}
// Display success message
//Notify.Add(TempData, true, $"OTP Generated successfully: {generatedOtp}", "");
var dto = new PhoneNumberDto { PhoneNumber = LoginModel.CountryCode + LoginModel.Username };
var response = await _apiService.GenerateRegisterOtp(dto);
if (response.IsSuccess)
{
    Notify.Add(TempData, true, "OTP Generated successfully", "");
}
else
{
    Notify.Add(TempData, false, "", response.Message);
}
OtpProcessing = false;
return RedirectToPage("/Auth/RegistrationForm");
}

Service.cs

public async Task<ResponseDto<string>> GenerateRegisterOtp(PhoneNumberDto dto)
{
var httpResponse = await _httpService.Post<PhoneNumberDto, ResponseDto<string>>(
    "/api/identity/generateregisterotp", dto);
var responseBody = await httpResponse.GetBody();
if (string.IsNullOrEmpty(responseBody))
{
    throw new ApplicationException("Empty response received from /api/identity/generateregisterotp.");
}
if (!httpResponse.Success)
    //throw new ApplicationException(await httpResponse.GetBody());
    throw new ApplicationException($"API returned an error: {responseBody}");
return httpResponse.Response;
}

Controller

[AllowAnonymous]
[HttpPost("generateregisterotp")]
public async Task<ResponseDto<string>> GenerateRegisterOTP(PhoneNumberDto phoneNumber)
{
 try
 {
     var existingUser = await _context.GetAppUserByUsername(phoneNumber.PhoneNumber);
     if (existingUser != null)
     {
         return new ResponseDto<string>(false, $"The {phoneNumber.PhoneNumber} is already registered");
     }
     var otp = new Random().Next(111947, 999999).ToString();
     var result = await _context.RegisterSetOtpAsync(phoneNumber.PhoneNumber, otp);
     if (result)
     {
         //await SendSms(phoneNumber, otp);
         return new ResponseDto<string>(true, $"OTP sent successfully");
     }
 }
 catch (Exception ex)
 {
     return new ResponseDto<string>(false, ex.Message);
 }
 return new ResponseDto<string>(false, "Server is not responding");
}

While generating OTP for new user, I am facing this issue of Status 404 error - HttpResponseMessage = {StatusCode: 404, ReasonPhrase: 'Not Found', Version: 1.1, Content: System.Net.Http.HttpConnectionResponseContent, Headers:

ASP.NET Core
ASP.NET Core
A set of technologies in the .NET Framework for building web applications and XML web services.
4,225 questions
{count} votes

Accepted answer
  1. Ping Ni-MSFT 2,250 Reputation points Microsoft Vendor
    2024-04-30T01:27:04.0333333+00:00

    Hi @Surya Chandra Mohan,

    Not sure how is your Controller name, but for your request url is: api/Identity/xxx , you need declare the Route attribute like below:

    [Route("api/Identity")]
    public class YourController:ControllerBase
    {
        //....
    }
    

    If your Controller is named IdentityController, you can also declare the Route attribute like below:

    [Route("api/[controller]")]
    public class IdentityController:ControllerBase
    {
        //...
    }
    

    Also be sure register the service and use the route middleware like below:

    builder.Services.AddControllers();   //be sure add this...
    builder.Services.AddRazorPages();
    //other services....
    
    app.UseRouting();
    //other middleware...
    app.MapRazorPages();
    app.MapControllers();     //be sure add this...
    

    If the answer is the right solution, please click "Accept Answer" and kindly upvote it. If you have extra questions about this answer, please click "Comment".
    Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.
    Best regards,
    Rena


0 additional answers

Sort by: Most helpful