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.

Die Anwendung abgeschlossen, ohne das Lesen des gesamten Anfrage Körper .net-core-2.1.1

Meine Anfrage im Postboten sieht wie folgt aus.
Die Anwendung abgeschlossen, ohne das Lesen des gesamten Anfrage Körper .net-core-2.1.1

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, darunter AllowCredentials mit AllowAnyOrigin. Die docs sagen, Sie können nicht zusammen verwendet werden, so versuchen, entfernen AllowCredentials von der UseCors Linie.

Schreibe einen Kommentar