Die Anwendung abgeschlossen, ohne das Lesen des gesamten Anfrage Körper .net-core-2.1.1
Habe ich einen Benutzer registrieren-controller zu registrieren, die Benutzer mit dem repository design pattern. Mein controller sieht so aus.
[Route("api/[controller]")]
public class AuthController : Controller
{
private readonly IAuthRepository _repo;
public AuthController(IAuthRepository repo)
{
_repo = repo;
}
[AllowAnonymous]
[HttpPost("register")]
public async Task<IActionResult> Register([FromBody] UserForRegisterDto userForRegisterDto){
//validate request
if(!ModelState.IsValid)
return BadRequest(ModelState);
userForRegisterDto.Username = userForRegisterDto.Username.ToLower();
if(await _repo.UserExists(userForRegisterDto.Username))
return BadRequest("Username is already taken");
var userToCreate = new User{
Username = userForRegisterDto.Username
};
var createUser = await _repo.Register(userToCreate, userForRegisterDto.Password);
return StatusCode(201);
}
}
Wenn ich eine Anfrage zu senden unter Verwendung Briefträger, es gibt mir das die 404-nicht gefunden-status-code-und API-Berichte der Anfrage abgeschlossen, ohne das Lesen des gesamten Körpers.
Meine Anfrage im Postboten sieht wie folgt aus.
Habe ich verwendet, Data Transfer Objects(DTO), um Daten zu Kapseln, die ich entfernt UserForRegisterDto
und versucht string username
und string password
wie folgt, aber es hat nicht funktioniert.
public async Task<IActionResult> Register([FromBody] string username, string password)
UserForRegisterDto
sieht wie folgt aus.
public class UserForRegisterDto
{
[Required]
public string Username { get; set; }
[Required]
[StringLength(8, MinimumLength =4, ErrorMessage = "You must specify a password between 4 and 8 characters.")]
public string Password { get; set; }
}
Ich habe versucht, viele online-Lösungen für diese, aber bisher ist noch nichts gelöst, mein problem. Bitte helft mir das Problem zu beheben, Danke im Voraus. Ich bin mit dieser API auf Ubuntu 18.04
Edit: Start.cs
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
//This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<DataContext>(x => x.UseSqlite(Configuration.GetConnectionString("DefaultConnection")));
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.AddCors();
services.AddScoped<IAuthRepository, AuthRepository>();
}
//This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
}
app.UseCors(x => x.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin().AllowCredentials());
app.UseMvc();
}
}
- Haben Sie versucht, setzen Sie einen Haltepunkt in der Methode zu sehen, ob es auch getroffen wird, wenn Sie aufrufen über postman? Sie können auch Ihre Start.cs?
- Ja, ich habe es versucht. es ist nicht getroffen zu werden. Startup.cs Hinzugefügt wird, ist die Frage.
- können Sie versuchen, entfernen von Diensten.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); und erneut versuchen?
- Versucht, problem besteht weiterhin.
- Hinzufügen Sie können eine einfache GET-Methode, die eine "Hello World" - string an den controller an, und versuchen Sie es aufrufen durch einen browser?
- Ich habe Probleme mit
Cors
in der Vergangenheit. Manchmal ist es zu verdanken, darunterAllowCredentials
mitAllowAnyOrigin
. Die docs sagen, Sie können nicht zusammen verwendet werden, so versuchen, entfernenAllowCredentials
von derUseCors
Linie.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Fehler info von
the application completed without reading the entire request body
tritt Häufig auf, wenn der client eine Anfrage senden, die nicht erfüllen, die sever Anforderungen . In anderen Worten , es passiert nur, bevor Sie in die Aktion , was, die Sie können nicht Debuggen über einen Haltepunkt innerhalb des Körpers der action-Methode .Zum Beispiel , sagen wir, eine action-Methode auf dem server :
Den
DummyDto
hier ist ein dummy-Klasse zu halten Informationen:Wenn die Kunden schicken eine Anfrage mit einer Nutzlast nicht gut formatiert
Z. B. die folgende post-Anfrage , die nicht über eine
Content-Type: application/json
header :wird Ergebnis in eine ähnliche Fehlermeldung info :
... und die Antwort vom server wird
404
:Als für die Frage, die Sie beschrieben , ich schlage vor, Sie sollten überprüfen Sie die folgende Liste :
Content-Type: application/json
? stellen Sie sicher, dass Sie überprüft haben, die headercode
zu zeigen, was es sendet genau dann, wenn Sie senden Sie eine Anfrage an den server .AuthController
war nicht in der Controller-Ordner. Ich schaffte es, es zu finden, weil deine ausführliche Antwort. HatsOff!Passiert es mir in einem neuen ASP.NET Core 2.1 service beim Debuggen in localhost hatte ich da in der Startup.Konfigurieren:
Ich deaktiviert diese Einstellung, wenn lokal Debuggen:
Kann es mehrere Gründe, aus denen man sein kann : – Caching in Visual Studio --
Ich hatte den gleichen Fehler (auch mit "Content-Type: application/json") aber das hinzufügen "{id}" in die Aktion verb für mich gearbeitet
d.h. eine änderung von
zu
(asp.net core 2.1)
Löste ich es so. Von
zu
[Route("api/authentication/")]
Wunsch/
. Der Schrägstrich bei[HttpPost("token")]
ich entfernt.Hatte das gleiche Problem, läuft ein
Dotnet 2.2
undNGinx
auf remote -Ubuntu 18.04
- Maschine, bekam ein:auf jeden API-Aufruf. Was löste es für mich war, zu installieren, die SSL-Zertifikate auf dem host durch CERTBot von Let ' s encrypt, da
Dotnet
erlaubt keine un-verschlüsselten traffic.Hofft, dass dies jemand hilft
Könnte Sie versuchen es, indem Sie ein request-Methode [Route("jsonbody")]
habe ich die gleichen Fehler,
prüfen vielleicht Sie put (AutoValidateAntiforgeryTokenAttribute) in AddMvc Dienstleistungen
In meinem Fall, war die Abfrage falsch:
Gelöst nach Update
&&
falschAND
ok