J'ai ce problème: Aucun service pour le type 'Microsoft.AspNetCore.Mvc.ViewFeatures.ITempDataDictionaryFactory' n'a été enregistré. Dans asp.net core 1.0, il semble que lorsque l'action essaie de rendre la vue, j'ai cette exception.
J'ai beaucoup cherché, mais je n'ai pas trouvé de solution. Si quelqu'un peut m'aider à comprendre ce qui se passe et comment puis-je résoudre ce problème, je l'apprécierai.
Mon code ci-dessous:
Mon project.json fichier
{
"dependencies": {
"Microsoft.NETCore.App": {
"version": "1.0.0",
"type": "platform"
},
"Microsoft.AspNetCore.Diagnostics": "1.0.0",
"Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
"Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
"Microsoft.Extensions.Logging.Console": "1.0.0",
"Microsoft.AspNetCore.Mvc": "1.0.0",
"Microsoft.AspNetCore.StaticFiles": "1.0.0-rc2-final",
"EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final",
"EntityFramework.Commands": "7.0.0-rc1-final"
},
"tools": {
"Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final"
},
"frameworks": {
"netcoreapp1.0": {
"imports": [
"dnxcore50",
"portable-net45+win8"
]
}
},
"buildOptions": {
"emitEntryPoint": true,
"preserveCompilationContext": true
},
"runtimeOptions": {
"configProperties": {
"System.GC.Server": true
}
},
"publishOptions": {
"include": [
"wwwroot",
"web.config"
]
},
"scripts": {
"postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
}
}
Mon Startup.cs fichier
using System;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Routing;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using OdeToFood.Services;
namespace OdeToFood
{
public class Startup
{
public IConfiguration configuration { get; set; }
// This method gets called by the runtime. Use this method to add services to the container.
// For more information on how to configure your application, visit http://go.Microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
{
services.AddScoped<IRestaurantData, InMemoryRestaurantData>();
services.AddMvcCore();
services.AddSingleton(provider => configuration);
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
//app.UseRuntimeInfoPage();
app.UseFileServer();
app.UseMvc(ConfigureRoutes);
app.Run(async (context) =>
{
await context.Response.WriteAsync("Hello World!");
});
}
private void ConfigureRoutes(IRouteBuilder routeBuilder)
{
routeBuilder.MapRoute("Default", "{controller=Home}/{action=Index}/{id?}");
}
}
}
Solution: Utilisez AddMvc()
au lieu de AddMvcCore()
dans Startup.cs
et cela fonctionnera.
S'il vous plaît voir ce numéro pour plus d'informations sur pourquoi:
Pour la plupart des utilisateurs, il n'y aura aucun changement et vous devriez continuer à utiliser AddMvc () et UseMvc (...) dans votre code de démarrage.
Pour les plus courageux, il existe maintenant une expérience de configuration où vous peut commencer avec un pipeline MVC minimal et ajouter des fonctionnalités pour obtenir un cadre personnalisé.
Vous devrez peut-être aussi ajouter une référence ToMicrosoft.AspNetCore.Mvc.ViewFeature
dans project.json
https://www.nuget.org/packages/Microsoft.AspNetCore.Mvc.ViewFeatures/
Si vous utilisez 2.0
, utilisez services.AddMvcCore().AddRazorViewEngine();
dans votre ConfigureServices
Pensez également à ajouter .AddAuthorization()
si vous utilisez l'attribut Authorize
, sinon cela ne fonctionnera pas.
Pour .NET Core 2.0, dans ConfigureServices, utilisez:
services.AddNodeServices();
Ajoutez simplement le code suivant et cela devrait fonctionner:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvcCore()
.AddViews();
}
Celui-ci fonctionne pour mon cas:
services.AddMvcCore()
.AddApiExplorer();
Pour ceux qui rencontrent ce problème lors de la mise à niveau .NetCore 1.X -> 2.0, mettez à jour vos Program.cs
et Startup.cs
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
}
public class Startup
{
// The appsettings.json settings that get passed in as Configuration depends on
// project properties->Debug-->Enviroment Variables-->ASPNETCORE_ENVIRONMENT
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.AddTransient<IEmailSender, EmailSender>();
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
// no change to this method leave yours how it is
}
}