Asp.net core Aspnet Core 3 ajax调用参数为空

Asp.net core Aspnet Core 3 ajax调用参数为空,asp.net-core,Asp.net Core,当我进行Ajax调用时,我的所有参数总是空的 这是我的javascript var data = { username: "john", password: "123" }; $.ajax({ type: "POST", url: "/MyCallback", data: JSON.stringify(data), contentType: "application/json; charset=utf-8", dataType: "jso

当我进行Ajax调用时,我的所有参数总是空的

这是我的javascript

var data = {
    username: "john",
    password: "123"
};

$.ajax({
    type: "POST",
    url: "/MyCallback",
    data: JSON.stringify(data),
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (data) { alert(data); },
    failure: function (errMsg) { alert(errMsg); }
});
这是我的控制器

public class UserModel
{
    string username { get; set; }
    string password { get; set; }
}


[Route("MyCallback")]
[HttpPost]
public JsonResult MyCallback([FromBody] UserModel query)
{
    // query.username and query.password is null
    return Json(true);
}
我的创业公司

public void ConfigureServices(IServiceCollection services)
{
    services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());

    services.AddControllersWithViews().AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.PropertyNameCaseInsensitive = true;
        options.JsonSerializerOptions.PropertyNamingPolicy = null;
    });

    services.AddRazorPages(options =>
    {
        options.RootDirectory = "/Features";
    });

    services.Configure<RazorViewEngineOptions>(options =>
    {
        options.ViewLocationExpanders.Add(new FeatureFolderViewLocationExpander());
    });

    services.AddCors();

    services.AddHttpContextAccessor();
}


public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
        app.UseHsts();
    }
    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseStaticFiles(new StaticFileOptions
    {
        FileProvider = new PhysicalFileProvider(
            Path.Combine(Directory.GetCurrentDirectory(), "Features")
        ),
        RequestPath = "/Features"
    });

    app.UseRouting();
    app.UseAuthentication();
    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
        endpoints.MapRazorPages();
    });
}
public void配置服务(IServiceCollection服务)
{
AddAutoMapper(AppDomain.CurrentDomain.GetAssemblys());
services.AddControllersWithViews().AddJsonOptions(选项=>
{
options.JsonSerializerOptions.PropertyNameCaseSensitive=true;
options.JsonSerializerOptions.PropertyNamingPolicy=null;
});
services.AddRazorPages(选项=>
{
options.RootDirectory=“/Features”;
});
配置(选项=>
{
options.ViewLocationExpanders.Add(新功能FolderViewLocationExpander());
});
services.AddCors();
AddHttpContextAccessor();
}
public void配置(IApplicationBuilder应用程序、IWebHostEnvironment环境)
{
if(env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
其他的
{
app.UseExceptionHandler(“/Home/Error”);
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseStaticFiles(新的StaticFileOptions
{
FileProvider=新的物理FileProvider(
Path.Combine(Directory.GetCurrentDirectory(),“功能”)
),
RequestPath=“/Features”
});
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(端点=>
{
endpoints.MapControllers();
endpoints.MapRazorPages();
});
}

知道为什么我的参数总是空的吗?

模型中的属性是private,您应该将其更改为public,否则无法使用此属性

 public class UserModel
 {
     public string username { get; set; }
     public string password { get; set; }
 }