C# 控制器敏感地接受来自应用程序/json负载的数据大小写
我正在用OData编写WebApi,遇到了一个问题。问题是控制器只接受区分大小写的数据。例如,当我传递C# 控制器敏感地接受来自应用程序/json负载的数据大小写,c#,asp.net-mvc,asp.net-core,C#,Asp.net Mvc,Asp.net Core,我正在用OData编写WebApi,遇到了一个问题。问题是控制器只接受区分大小写的数据。例如,当我传递{“name”:“London”}时,它给出了一个空对象和一个错误属性“name”在类型“Taxes.Service.DataLayer.Models.communications”上不存在。确保仅使用由类型定义的属性名称。。但是当我通过{“Name”:“London”}时,一切都正常-对象被创建,值被设置。我不知道到底出了什么问题。谢谢 BaseController.cs public cla
{“name”:“London”}
时,它给出了一个空对象和一个错误属性“name”在类型“Taxes.Service.DataLayer.Models.communications”上不存在。确保仅使用由类型定义的属性名称。
。但是当我通过{“Name”:“London”}
时,一切都正常-对象被创建,值被设置。我不知道到底出了什么问题。谢谢
BaseController.cs
public class BaseController<T> : ODataController where T : BaseModel
{
protected readonly TaxesContext Context;
public BaseController(TaxesContext context)
{
Context = context;
}
[HttpPost]
public async Task<IActionResult> Post([FromBody]T baseObject)
{
if (!ModelState.IsValid)
{
var errors = ModelState
.SelectMany(x => x.Value.Errors, (y, z) => z.Exception.Message);
return BadRequest(errors);
}
await Context.Set<T>().AddAsync(baseObject);
await Context.SaveChangesAsync();
return Created(baseObject);
}
}
市政当局.cs
public class BaseModel
{
public int Id { get; set; }
}
public class Municipality : BaseModel
{
public string Name { get; set; }
public ICollection<Tax> Taxes { get; set; }
}
public class Tax : BaseModel
{
[Required]
public int MunicipalityId { get; set; }
[Required]
public virtual Municipality Municipality { get; set; }
[Required]
public virtual TaxFrequency Frequency { get; set; }
[Required]
public virtual DateTime StartDate { get; set; }
[Required]
public virtual DateTime EndDate { get; set; }
[Required]
public virtual double Value { get; set; }
}
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.AddOData();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.AddDbContext<TaxesContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
}
// 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.UseHttpsRedirection();
app.UseMvc(routes =>
{
routes.Select().Expand().Filter().OrderBy().MaxTop(100).Count();
routes.MapODataServiceRoute("odata", "odata", GetEdmModel());
routes.MapRoute("Default", "{controller}/{action=Index}/{id?}");
});
}
private static IEdmModel GetEdmModel ()
{
var builder = new ODataConventionModelBuilder();
builder.EntitySet<DataLayer.Models.Municipality>("Municipalities");
builder.EntitySet<DataLayer.Models.Tax>("Taxes");
var function = builder.Function("MunicipalityWithTax");
function.ReturnsCollectionViaEntitySetPath<DataLayer.Models.Municipality>("Municipalities");
return builder.GetEdmModel();
}
}
Startup.cs
public class BaseModel
{
public int Id { get; set; }
}
public class Municipality : BaseModel
{
public string Name { get; set; }
public ICollection<Tax> Taxes { get; set; }
}
public class Tax : BaseModel
{
[Required]
public int MunicipalityId { get; set; }
[Required]
public virtual Municipality Municipality { get; set; }
[Required]
public virtual TaxFrequency Frequency { get; set; }
[Required]
public virtual DateTime StartDate { get; set; }
[Required]
public virtual DateTime EndDate { get; set; }
[Required]
public virtual double Value { get; set; }
}
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.AddOData();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.AddDbContext<TaxesContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
}
// 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.UseHttpsRedirection();
app.UseMvc(routes =>
{
routes.Select().Expand().Filter().OrderBy().MaxTop(100).Count();
routes.MapODataServiceRoute("odata", "odata", GetEdmModel());
routes.MapRoute("Default", "{controller}/{action=Index}/{id?}");
});
}
private static IEdmModel GetEdmModel ()
{
var builder = new ODataConventionModelBuilder();
builder.EntitySet<DataLayer.Models.Municipality>("Municipalities");
builder.EntitySet<DataLayer.Models.Tax>("Taxes");
var function = builder.Function("MunicipalityWithTax");
function.ReturnsCollectionViaEntitySetPath<DataLayer.Models.Municipality>("Municipalities");
return builder.GetEdmModel();
}
}
公共类启动
{
公共启动(IConfiguration配置)
{
配置=配置;
}
公共IConfiguration配置{get;}
//此方法由运行时调用。请使用此方法将服务添加到容器中。
public void配置服务(IServiceCollection服务)
{
services.AddOData();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.AddDbContext(options=>options.UseSqlServer(Configuration.GetConnectionString(“DefaultConnection”));
}
//此方法由运行时调用。请使用此方法配置HTTP请求管道。
公共无效配置(IApplicationBuilder应用程序,IHostingEnvironment环境)
{
if(env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
其他的
{
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseMvc(路由=>
{
routes.Select().Expand().Filter().OrderBy().MaxTop(100.Count();
MapODataServiceRoute(“odata”,“odata”,getedModel());
MapRoute(“默认值”,“{controller}/{action=Index}/{id?}”);
});
}
私有静态IEdmModel GetedModel()
{
var builder=新的ODataConventionModelBuilder();
建筑商实体集(“市政当局”);
建筑商实体集(“税费”);
var function=builder.function(“市政税”);
returnsCollectionViatitySetPath(“市政当局”);
返回builder.GetEdmModel();
}
}
邮差请求
使用以下语句添加camelCase支持:
builder.EnableLowerCamelCase()
private静态IEdmModel GetedModel()
{
var builder=新的ODataConventionModelBuilder();
builder.EnableLowerCamelCase();//你能发布你的Startup.cs
文件内容吗?谢谢!你是我的英雄!很高兴我能帮上忙!