¿Por qué la URI de solicitud de este HttpRequestMessage es inválida?
Estoy tratando de escribir una prueba de integración donde pruebo la funcionalidad de registro de mi aplicación. Este es el controlador:
[Route("account")]
public class IdentityController : MainController
{
// ...
}
[HttpGet("signup")]
public IActionResult SignUp()
{
return View();
}
[HttpPost("signup")]
public async Task<iactionresult> SignUp(UserSignUpViewModel signUp)
{
if (!ModelState.IsValid)
{
Estoy siguiendo un entrenamiento en línea y, según el video, así como otros ejemplos, esto es cómo se suponía que debía hacerse para poder probar el envío del formulario:
[Fact]
public async Task IdentityCreateUserShouldBeSuccessful()
{
// Arrange
var initialResponse = await _fixture.Client.GetAsync("/account/signup");
initialResponse.EnsureSuccessStatusCode();
var antiForgeryToken = _fixture.GetAntiForgeryToken(await initialResponse.Content.ReadAsStringAsync());
var postRequest = new HttpRequestMessage(HttpMethod.Post, "/account/signup")
{
Content = new FormUrlEncodedContent(new Dictionary<string, string="">
{
{ "Name", "John Malone Doe" },
// ...
}
}
// Act
var response = await _fixture.Client.SendAsync(postRequest);
// ...
}
Rider incluso autocompletará la ruta por mí, pero fallará con un mensaje que dice:
System.InvalidOperationException: Se proporcionó una URI de solicitud no válida. La URI de solicitud debe ser una URI absoluta o se debe establecer BaseAddress.
Intenté pasar la dirección completa, “https://localhost:5001/account/signup”, y también escribir el código de esta manera:
var postRequest = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri("https://localhost:5001/account/signup"),
Content = new FormUrlEncodedContent(new Dictionary<string, string="">
{
Ninguna solución funcionó.</string,></string,>
davy.ai
Para resolver este problema, es necesario actualizar la propiedad BaseAddress del objeto HttpClient con la URL base de tu aplicación. Aquí te explico cómo puedes hacerlo:
Al establecer la propiedad BaseAddress, el HttpClient automáticamente añadirá el URI relativo (“/account/signup” en este caso) a la URL base (“https://localhost:5001/”) para crear el URI absoluto (“https://localhost:5001/account/signup”). Esto debería solucionar la excepción “Se proporcionó un URI de solicitud no válido”.</string,>