fin*_*s10 5 c# json.net asp.net-core-mvc asp.net-core-3.0 .net-standard-2.1
我netstandard2.1在netcoreapp3.0Web应用程序中使用库。在中添加服务时Startup,出现以下错误:
'无法从程序集'Microsoft.AspNetCore.Mvc.Formatters.Json,版本= 3.0.0.0加载类型'Microsoft.AspNetCore.Mvc.MvcJsonOptions'
我还在Microsoft.AspNetCore.Mvc类库中使用了2.2.0包中的某些功能。
这是我的图书馆.csproj,
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.2.0" />
</ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
这是ServiceExtensions我图书馆的课,
public static class ServiceExtensions
{
public static IMvcBuilder AddMyLibrary(this IMvcBuilder builder)
{
builder.Services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();
builder.AddJsonOptions(options =>
{
options.SerializerSettings.ContractResolver = new DefaultContractResolver();
});
builder.Services.ConfigureOptions<ConfigureLibraryOptions>();
return builder;
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的ConfigureLibraryOptions课,
public class ConfigureLibraryOptions : IConfigureOptions<MvcOptions>
{
public void Configure(MvcOptions options)
{
options.ModelBinderProviders.Insert(0, new CustomBinderProvider());
}
}
Run Code Online (Sandbox Code Playgroud)
这是ConfigureServices来自Startup,
services.AddControllersWithViews().AddMyLibrary();
Run Code Online (Sandbox Code Playgroud)
请帮助我为什么会出现此错误,并协助解决该问题?
Yas*_*osh 18
netstandard2.1 到 netcoreapp3.0 MvcJsonOptions -> MvcNewtonsoftJsonOptions
public IServiceProvider ConfigureServices(IServiceCollection services)
{
//MVC
services.AddControllersWithViews(options =>
{
}).AddNewtonsoftJson();
services.PostConfigure<MvcNewtonsoftJsonOptions>(options => {
options.SerializerSettings.ContractResolver = new MyCustomContractResolver()
{
NamingStrategy = new CamelCaseNamingStrategy()
};
options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
});
}
Run Code Online (Sandbox Code Playgroud)
Lee*_*son 10
我不确定这是否可以解决OP的问题,但是当您在.Net Core 3中使用Swashbuckle 4时,也会发生此错误。在撰写本文时,解决方案是使用Swashbuckle 5的预发行版本。
<PackageReference Include="Swashbuckle.AspNetCore" Version="5.0.0-rc4" />
Run Code Online (Sandbox Code Playgroud)
然后,您需要在Startup.cs中对其进行升级。一般来说,涉及前缀不与编译类OpenApi如
options.SwaggerDoc("v1" new Info ...
变成
options.SwaggerDoc("v1", OpenApiInfo
也OpenApiSecurityScheme变成ApiKeyScheme
另请参阅https://github.com/domaindrivendev/Swashbuckle.AspNetCore中的文档
| 归档时间: |
|
| 查看次数: |
1353 次 |
| 最近记录: |