получение ошибки 400 при вызове webapi blazorserver - PullRequest
0 голосов
/ 02 августа 2020

Я пытаюсь настроить серверное приложение Blazor, вызывая webapi. Когда я вызываю API, я получаю сообщение об ошибке 400.

У меня есть 3 проекта, projectserver и projectapi. projectserver - это то место, где находится приложение Blazor, а Project API - это то место, где находится API.

Я не знаю, может ли apicall найти API, поскольку он не попадает ни в какие точки останова в разделе API, я полностью запутался , если он не может найти API, он должен возвращать ошибку 404 или другую ошибку, а не 400?

спасибо за ваши усилия. это мой код,

Projectserver, здесь я публикую модель регистрации в API

    public string message { get; set; }
    public RegisterModel r = new RegisterModel();

    private async Task Create(MouseEventArgs e)
    {
        var json = Newtonsoft.Json.JsonConvert.SerializeObject(r);
        var client = clientfactory.CreateClient("ServerApi");
        var result = await client.PostAsJsonAsync("/Account/Register",json); // check the Startup file and check base address for the Full route. 

        message = result.StatusCode.ToString();
    }
} 

ClientFactory возвращает базовый адрес того, что определено в startup.cs

services.AddHttpClient("ServerApi", client => client.BaseAddress = new Uri("https://localhost:44302/"));

API - это Projectserver и определяется следующим образом.

[Route("[controller]")]
    [ApiController]
    public class AccountContoller : ControllerBase
    {
        private readonly ApplicationDbContext _context;
        private readonly SecurityOptions _securityOptions;

        private readonly JwtIssuerOptions _jwtOptions;
        // GET: api/<Account>
        [HttpGet]
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }

        // GET api/<Account>/5
        [HttpGet("{id}")]
        public string Get(int id)
        {
            return "value";
        }

        // POST api/<Account>
        [HttpPost]
        public void Post([FromBody] string value)
        {
        }
        // POST api/<Account>
        [HttpPost("Register")]
        public async Task<ActionResult<RegisterResult>> Register(RegisterModel model)
        {
            RegisterResult r = new RegisterResult();

            var Exisits = await _context.Users.Where(r => r.EmailAddress == model.Email).FirstOrDefaultAsync();

            if(Exisits != null)
            {
                r.Sucsess = false;
                r.ErrorMessage = "Email - Already Exisits";
                return r;
            }
            else
            {
                try
                {
                    User newuser = new User();
                    newuser.CreatedDateTime = DateTime.UtcNow;
                    newuser.UserID = Guid.NewGuid();
                    newuser.MobileNumber = model.MobileNumber;
                    newuser.Password = model.Password;
                    newuser.FirstName = model.FirstName;
                    newuser.Surname = model.LastName;
                    _context.Users.Add(newuser);
                    await _context.SaveChangesAsync();

                    r.Sucsess = true;
                    return r;


                }
                catch(Exception e)
                {
                    r.Sucsess = false;
                    r.ErrorMessage = e.ToString();
                    return r; 
                }
                
                

            }

            
        }

классы модели определены как Serializable

 [Serializable]
    public class RegisterResult
    {
        public bool Sucsess { get; set; }
        public string ErrorMessage { get; set; }
    }
    [Serializable]
    public class RegisterModel
    {
        public string UserName { get; set; }
        public string Password { get; set; }
        public string Email { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string RoleID { get; set; }
        public string EntityID { get; set; }
        public string MobileNumber { get; set; }
    }

1 Ответ

0 голосов
/ 02 августа 2020

Не могли бы вы изменить свой код, как показано ниже, и попробовать: -

var serializedBody = JsonConvert.SerializeObject(r);
var jsonRequestBodyContent = new StringContent(serializedBody, Encoding.UTF8,"application/json");
 var client = clientfactory.CreateClient("ServerApi");
 var result = await client.PostAsync("/Account/Register",jsonRequestBodyContent);
...