ASP.NET5 500使用存储库模式时出错

本文关键字:模式 出错 存储 NET5 ASP | 更新日期: 2023-09-27 18:28:45

编辑3:我不知道我做了什么来解决这个问题,但我的问题消失了。我认为我发现的最重要的事情,如果你有这个问题的话,需要注意的是,在ASP.NET 5 MVC 6中,我们必须为几乎所有的东西添加中间件,包括使用app.UseDeveloperExceptionPage();的开发人员错误页面。。。在那之后,我意识到堆栈跟踪可能引用了从控制器中引用的其他类,比如在我的情况下的存储库和上下文对象。我有点搞砸了,但我不记得有什么大的改变。我想我的存储库类的构造函数可能有一个拼写错误。

控制器出现500内部服务器错误,但它显示的静态json数据没有构造函数。我怀疑内置的依赖项注入有问题,但我无法解决,因为我在构建过程中没有收到任何错误或警告。

编辑:当导航到http://localhost:5000/api/blogpost/时,我在浏览器中完全看不到任何东西。只是一页空白。没有错误。没有什么。使用Postman发送HTTP请求,我得到错误代码500。同样,通过注释掉构造函数,我看到了{"name":"Cameron"},并在浏览器和Postman中获得了代码200OK。VS中没有异常,输出控制台中也没有错误。

编辑2:我找到了中间件app.UseDeveloperExceptionPage();,它产生了MissingMethodException: No parameterless constructor defined for this object.-如果我制作了一个无参数构造函数,它就会产生:InvalidOperationException: Multiple constructors accepting all given argument types have been found in type 'MyApp.Controllers.BlogPostController'. There should only be one applicable constructor.-看起来ASP.NET5的dep注入有点奇怪?

这是我的控制器:

using MyApp.Data.Repository;
using MyApp.Models;
using Microsoft.AspNet.Mvc;
using System;
    namespace MyApp.Controllers
    {
        [Route("api/[controller]")]
        public class BlogPostController : Controller
        {
            // If I comment out this var and the constructor this works.
            private IBlogPostRepository _repository;
            // If I leave them here, I get a 500 Internal Server Error.
            // If I set a breakpoint here, it never fires.
            // If I create a constructor that takes zero args, it never fires.
            // I do not get any errors.
            public BlogPostController(IBlogPostRepository repository)
            {
                _repository = repository;
            }
            [HttpGet]
            public JsonResult Get()
            {
                return Json(new { name = "Cameron" });
            }
        }
    }

这里是Startup.cs配置服务:

public void ConfigureServices(IServiceCollection services)
{
    // MVC 6
    services.AddMvc();
    // EntityFramework 7
    services.AddEntityFramework()
        .AddSqlServer()
        .AddDbContext<AppDbContext>(options =>
        {
            // Will use the last Data:DefaultConnection:ConnectionString
            // that was loaded from the config files in the constructor.
            options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]);
        });
    // Injections
    services.AddTransient<AppDbContextSeedData>();
    services.AddScoped<IBlogPostRepository, BlogPostRepository>();
}

ASP.NET5 500使用存储库模式时出错

我也遇到了同样的问题。我的构造函数没有作用域。这个类是公共的,所以我在构造函数之前添加了"public",它就起作用了!

所以,不起作用:

public class VisualizationsController : Controller
{
VisualizationsController() {...}
}

工作:

public class VisualizationsController : Controller
{
public VisualizationsController() {...}
}

我在添加另一个控制器时遇到了一种情况,忘记更新Startup.cs页面。

在Startup.cs的ConfigureServices下,尝试添加:

services.AddSingleton<ISomeRepository, SomeRepository>();
services.AddSingleton<ISomeOtherRepository, SomeOtherRepository>();

假设您在新的控制器构造函数中传递ISomeOtherDepository