小编Lau*_*son的帖子

ASP.NET Core 2.0中的应用程序变量

我如何在ASP.NET Core 2.0中设置和访问应用程序范围的变量?

细节: 我有一个变量,我们称之为CompanyName,它存在于数据库中,并且几乎每个页面都使用它.每次我需要显示CompanyName时,我都不想访问数据库.100年前,我会设置Application["CompanyName']=CompanyName但我明白这不是在.NET Core中做事的方法.会有什么选择?

c# asp.net asp.net-core asp.net-core-2.0

14
推荐指数
2
解决办法
6183
查看次数

ASP.NET Core 测试 - 在夹具中初始化 InMemory SQLite dbcontext 时获取 NullReferenceException

我有一个测试装置,我在其中初始化了我的 SQLite 内存 dbcontext,如下所示:

public static MYAPPDBContext Create()
{
    var options = new DbContextOptionsBuilder<MYAPPDBContext>()
                    .UseSqlite("DataSource=:memory:")
                    .Options;
    var context = new MYAPPDBContext(options);

    context.Database.OpenConnection(); // this is where exception is thrown
    context.Database.EnsureCreated();

    return context;
}
Run Code Online (Sandbox Code Playgroud)

当我调用 Create() 方法时,我得到以下 NullReferenceException:

System.NullReferenceException
  HResult=0x80004003
  Message=Object reference not set to an instance of an object.
  Source=Microsoft.Data.Sqlite
  StackTrace:
   at Microsoft.Data.Sqlite.SqliteConnection.Open()
   at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenDbConnection(Boolean errorsExpected)
   at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Open(Boolean errorsExpected)
   at Microsoft.EntityFrameworkCore.Sqlite.Storage.Internal.SqliteRelationalConnection.Open(Boolean errorsExpected)
   at Microsoft.EntityFrameworkCore.RelationalDatabaseFacadeExtensions.<>c.<OpenConnection>b__15_0(DatabaseFacade database)
   at Microsoft.EntityFrameworkCore.ExecutionStrategyExtensions.Execute[TState,TResult](IExecutionStrategy strategy, Func`2 operation, Func`2 verifySucceeded, TState state)
   at Microsoft.EntityFrameworkCore.ExecutionStrategyExtensions.Execute[TState,TResult](IExecutionStrategy strategy, TState state, Func`2 …
Run Code Online (Sandbox Code Playgroud)

c# sqlite xunit in-memory-database asp.net-core

13
推荐指数
2
解决办法
5000
查看次数

如何在 ELMAH 中连接自定义电子邮件提供商?

我在谷歌群组的 elmah 群组中问过这个问题,但我仍然很困惑,所以我想我应该把它扔到一个更大的池中。这是我当前代码的原始注释。


我在 MVC 5 应用程序上设置了 ELMAH,并且我想使用自定义电子邮件服务来发送电子邮件,而不是使用默认设置的 smtp 发送。(这是组织偏好。)我一直在研究它,但不知道如何做到这一点。我的服务调用工作正常,但我无法将其连接起来,以便在出现异常时运行。任何帮助将不胜感激。

我的设置如下:

Web.config(删除了与 elmah 无关的行):

<?xml version="1.0" encoding="utf-8"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=301880
  -->
<configuration>
  <configSections>
    <sectionGroup name="elmah">
      <section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah" />
      <section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah" />
      <section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah" />
      <section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah" />
    </sectionGroup>
  </configSections><appSettings>
    ...
    <add key="elmah.mvc.disableHandler" value="false" />
    <add key="elmah.mvc.disableHandleErrorFilter" value="false" />
    <add key="elmah.mvc.requiresAuthentication" value="false" />
    <add key="elmah.mvc.IgnoreDefaultRoute" value="false" />
    <add …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc elmah

6
推荐指数
1
解决办法
712
查看次数

带有区域的WebAPI路由-缺少可选参数时出现404错误

当我尝试不带可选参数的WebAPI控制器时遇到了404错误。我尝试将Global.asax.cs中的路线初始化命令重新排序无济于事。WebAPI在一个区域中,因此我注释掉该区域的路由信息​​,因此找不到该路由。这是我所拥有的:

在WebApiConfig.cs中:

        public static void Register(HttpConfiguration configuration)
    {
        configuration.Routes.MapHttpRoute("DefaultAPI",
            "API/{controller}/{action}/{id}",
            new { id = RouteParameter.Optional });

        // From http://weblogs.asp.net/fbouma/how-to-make-asp-net-webapi-serialize-your-llblgen-pro-entities-to-json
        var json = configuration.Formatters.JsonFormatter;
        json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;
        json.SerializerSettings.ContractResolver = new DefaultContractResolver()
        {
            IgnoreSerializableInterface = true,
            IgnoreSerializableAttribute = true
        };

        var appXmlType = configuration.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");
        configuration.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);
    }
Run Code Online (Sandbox Code Playgroud)

在APIAreaRegistration.cs中:

        public override void RegisterArea(AreaRegistrationContext context)
    {
        //context.MapRoute(
        //    "API_default",
        //    "API/{controller}/{action}/{id}",
        //    new { action = "Index", id = UrlParameter.Optional }
        //);
    }
Run Code Online (Sandbox Code Playgroud)

在Global.asax.cs中:

        protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        GlobalConfiguration.Configure(WebApiConfig.Register); 
        //WebApiConfig.Register(GlobalConfiguration.Configuration); …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc asp.net-web-api asp.net-web-api-routing

1
推荐指数
1
解决办法
962
查看次数

对继承自 BasePageModel 的 Razor 页面进行单元测试

我有一个 Razor Pages 应用程序,其中站点中的所有页面都使用多项服务BasePageModel,并将这些服务添加到我在每个 Razor 页面上继承的 。我的BasePageModel看起来像这样:

public abstract class BasePageModel : PageModel
{
    private IUserClaimsService _userClaims;
    private IAuthorizationService _authService;

    protected virtual IUserClaimsService UserClaimsService => _userClaims ?? (_userClaims = HttpContext.RequestServices.GetService<IUserClaimsService>());
    protected virtual IAuthorizationService AuthService => _authService ?? (_authService = HttpContext.RequestServices.GetService<IAuthorizationService>()); 
}
Run Code Online (Sandbox Code Playgroud)

Razor 页面本身看起来像这样:

public class IndexModel : BasePageModel
{
    public async Task<ActionResult> OnGet()
    {
        var HasAccess = (await AuthService.AuthorizeAsync(User, "PermissionName")).Succeeded;
        if (!HasAccess)
        {
            return new ForbidResult();
        }
        return Page();
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在创建单元测试来测试 Razor 页面上的授权。我的授权具有取决于用户声明的策略。我想做的是模拟用户声明并相应地测试授权是否成功或失败,具体取决于页面。但是,我无法UserClaimsService从我的测试中模拟它。我实例化了 …

c# unit-testing asp.net-core razor-pages

1
推荐指数
1
解决办法
1833
查看次数