标签: asp.net-mvc-5

使用 Unity 在控制器外部进行 ASP.NET MVC 依赖注入

我正在使用存储库和服务层设计模式构建 ASP.NET MVC 5 应用程序。我已经使用 unity 将我的服务注入到我的控制器中。

这工作得很好,直到现在我还不需要考虑实例化任何需要在控制器外部注入接口的对象。但是,在配置应用程序启动以在数据库中设置一些用户时,我需要这样做。

为此,我想使用我UsersService构建的。我想到,随着应用程序的增长,肯定会在其他情况下我想做同样的事情,例如从另一个服务中调用一个服务。

我发现我可以实例化一个 Unity 容器并调用它的解析来获取我的新服务实例:

IProductService productService = container.Resolve<IProductService>();
Run Code Online (Sandbox Code Playgroud)

然而,这对我来说有点难闻,让容器泄漏到我的应用程序中似乎是一种反模式。那么有没有更好的方法来做到这一点呢?

asp.net-mvc dependency-injection unity-container asp.net-mvc-5

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

无法使用集合初始值设定项初始化类型“SelectListItem”,因为它未实现“System.Collections.IEnumerable”

我正在尝试创建一个SelectListItem列表以在我的视图中使用。

我尝试使用 Linq 将其传递给 ViewBag,如​​下所示:

    public ActionResult Create()
    {
        ViewBag.EmailAccounts = db.EmailAccounts.Select(e => new SelectListItem { e.ID, e.Name });
        return View();
    }
Run Code Online (Sandbox Code Playgroud)

但它给了我这个错误:

无法使用集合初始值设定项初始化类型“SelectListItem”,因为它未实现“System.Collections.IEnumerable”

我从这里得到了这样做的想法:http://odetocode.com/blogs/scott/archive/2013/03/11/dropdownlistfor-with-asp-net-mvc.aspx

我在这里缺少什么概念?

c# linq asp.net-mvc-5

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

如何在 MVC 5 C# 中正确获取要渲染的嵌套文件夹

我已经得到了传统网站,所有 MVC 5 都按预期工作,一切都正确渲染并且工作正常。

我添加了一个仪表板,并且我尝试将此仪表板设置为文件夹结构,使其与 MVC 5 C# 网站的其余部分隔离;但是,我收到一条服务器错误,指出布局引擎找不到我的部分视图。

现在,当视图本身加载时,这通过了测试并且确实返回了正确的视图,当布局引擎无法找到嵌套的部分视图时,问题就出现了。

由于我没有完全理解 MVC 5,所以我对这一点感到迷失。

现在,就像之前提到的,就开箱即用的文件夹结构而言,一切都完美运行,但是当我创建嵌套文件夹并放置部分视图时,MVC 5 引擎无法找到这些嵌套的部分视图。

嵌套这些部分视图的原因很明显,我将实际的传统网站与用户仪表板视图分开。

当我单击指向索引文件的操作链接时,这可以工作,但是当主体(视图)尝试渲染它时,找不到嵌套的部分视图。

我在这里缺少什么?我希望我提供了足够的信息,使回答这个问题尽可能容易。

加载实际用户仪表板索引有效

 @{
    ViewBag.Title = "Your Dashboard";
    Layout = "~/Views/Shared/UserDashboard/_Layout_Dashboard.cshtml";
}
<!-- Content Wrapper. Contains page content -->
<div class="content-wrapper">
Run Code Online (Sandbox Code Playgroud)

加载实际的部分是服务器说不不,你没有正确执行此操作的地方。

这个快照是 _Layout

这是确切的服务器错误,请建议我实施此错误的正确方法。

Server Error in '/' Application.
The partial view '~/Views/Shared/UserDashboard/_PartialHeader_Dashboard' was not found or no view engine supports the searched locations. The following locations were searched:
~/Views/Shared/UserDashboard/_PartialHeader_Dashboard
Description: An unhandled exception occurred during the execution of the current web request. Please …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc .net-4.5 asp.net-mvc-5

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

保存文件时出现 UnauthorizedAccessException,但可以创建目录

我正在尝试将文件保存到磁盘,但收到 UnauthorizedAccessException。\n该错误表明我必须获得该文件夹的正确权限,并且我已尝试了我能找到的所有可能的用户,但没有成功工作。

\n\n

尝试过以下用户

\n\n
    \n
  • 网络
  • \n
  • 网络服务
  • \n
  • IUSR
  • \n
  • IUSR_[计算机名]
  • \n
\n\n

并在不工作的情况下给予充分的权利。

\n\n

我发现真正奇怪的是,我在尝试保存文件之前创建了一个目录,并且效果很好,当尝试将文件保存到该新目录时,我得到了 UnautorhizedAccessException。

\n\n

代码如下:

\n\n
    [HttpPost]\n    public ActionResult Images(HttpPostedFileBase file, string boatId)\n    {\n        if (file.ContentLength > 0)\n        {\n            var fileName = Path.GetFileName(file.FileName);\n            var path = Path.Combine(Server.MapPath("~/Content/Images/" + boatId));\n            Directory.CreateDirectory(path);\n            file.SaveAs(path);\n\n        }\n        return View($"Filen p\xc3\xa5 {boatId} har laddats upp");\n    }\n
Run Code Online (Sandbox Code Playgroud)\n\n

对我所缺少的有什么想法吗?

\n

c# model-view-controller asp.net-mvc-5

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

访问内部API控制器

有没有办法从另一个类调用应用程序 API 控制器而不使用 API 的 url?

例如我在“personContoller”中有这个方法

    public async Task<ActionResult> GetPersonRecord(string id)
    {
        Person person;
        var link = "api/entity/Person/" + id + "?format=json";
        string results = await OneIMAction(link);
        person = JsonConvert.DeserializeObject<Person>(results);
        string json = JsonConvert.SerializeObject(person, Formatting.Indented);
        return Content(json, "application/json");
    }
Run Code Online (Sandbox Code Playgroud)

如何在同一应用程序中的另一个 C# 类中访问此方法的 JSON 结果,而无需使用 Web 请求?那可能吗?

.net c# asp.net-mvc asp.net-mvc-5

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

ASP.NET MVC5 异常后重定向到 ErrorPage

我编写了一个自定义异常过滤器来记录我的应用程序异常,异常发生后我想将用户重定向到错误页面下面是我的代码

我的代码工作得很好,它捕获了异常,但在记录后它并没有将我扔到错误页面,你能帮忙吗

我的 CustomException Filer 类

public class CustomExceptionFilterAttribute : HandleErrorAttribute
{
    public override void OnException(ExceptionContext filterContext)
    {
        try
        {
            string requestBody = "", Action = "", Controller = "";

            try 
            {
                requestBody = filterContext.HttpContext.Request.Form.ToString();
                        Action = filterContext.RouteData.Values["action"].ToString();
                        Controller = filterContext.RouteData.Values["controller"].ToString();
            }
            catch (Exception)
            {
            }

            StringBuilder sbHeader = new StringBuilder();
            sbHeader.AppendLine(filterContext.RequestContext.HttpContext.Request.Headers.ToString());
            StaticMethods.LogException(SessionHelper.LoginCode.ToString(), Action, Controller, filterContext.Exception.Message, filterContext.RequestContext.HttpContext.Request.RawUrl.ToString(), requestBody, sbHeader.ToString());

            // This is which i am more concern about
            filterContext.RouteData.Values.Add("Error", filterContext.Exception.Message);
            filterContext.Result = new RedirectToRouteResult(
                                       new RouteValueDictionary(new { controller = "Error", …
Run Code Online (Sandbox Code Playgroud)

c# asp.net exception asp.net-mvc-5

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

HangFire 无法排队(即发即忘)作业

我有一个长时间运行的方法,我决定使用 HangFire 在后台执行并通过仪表板管理它们。我使用以下代码设置了仪表板和 Hangfire 本身:

HangFireConfiguration.cs

public static class HangFireConfiguration
{
    public static string DashboardUrl = "/tasks";

    public static void Configure(IAppBuilder app)
    {
        GlobalConfiguration.Configuration.UseSqlServerStorage("DefaultConnection");

        var options = new DashboardOptions
        {
            Authorization = new[]
            {
                new HangFireAuthorization()
            }
        };

        app.UseHangfireDashboard(DashboardUrl, options);
        app.UseHangfireServer(new BackgroundJobServerOptions()
        {
            //ShutdownTimeout = TimeSpan.FromHours(24)
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

HangFireAuthorization.cs

public class HangFireAuthorization : IDashboardAuthorizationFilter
{
    public static string DashboardUrl = "/tasks";

    public bool Authorize([NotNull] DashboardContext context)
    {
        if (HttpContext.Current.User != null && HttpContext.Current.User.Identity.IsAuthenticated)
        {
            return HttpContext.Current.User.IsInRole("admin");
        }
        return false; …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc asp.net-mvc-5 hangfire

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

User.IsInRole 每次都会在 Active Directory 中查找吗?

在我们的 MVC 5 Web 应用程序中,我们使用 User.IsInRole() 函数来评估当前登录用户(使用 Windows 身份验证)是否属于 Active Directory 中相应组的一部分。在我的本地,此功能的评估速度很快,但在生产中则需要一些时间。此函数是否每次都会访问 Active Directory 并查看用户是否属于组?

设想:

假设我在数据库中配置了总共 10 个组,并且我想获取用户所属组的列表。因此,我迭代 10 个组并调用 User.IsInRole("group_name") 并准备预期的组列表。这是否会每次都访问 Active Directory 以检查组中用户的成员身份?

c# active-directory windows-authentication asp.net-mvc-5

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

无法转换类型为“Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope”的对象

所以我试图实现我的 IoC,将我的 DBContext 类链接为依赖注入作为服务提供者。

我在启动 ASP Core 应用程序时遇到此错误所以我的问题是;我做错了什么,我尝试用谷歌搜索它,但我无法真正找到解决方案。我尝试询问校园里一些更精英的程序员,但他们没有专门使用 ASPnet Core,所以他们不知道这是因为我的选角还是因为 ASPnet Core

应用程序启动异常:System.InvalidCastException:无法将类型“Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope”的对象强制转换为类型“Microsoft.Extensions.DependencyInjection.ServiceProvider”。在 F:\Developement\SpackkMVC\Spackk\Spackk\Startup.cs 中的 Spackk.Startup.Configure(IApplicationBuilder app, IHostingEnvironment env, IServiceProvider serviceProvider) 处:第 44 行 --- 抛出异常的上一个位置的堆栈跟踪结束 --- - 在 Microsoft.AspNetCore.Hosting.ConventionBasedStartup.Configure(IApplicationBuilder 应用程序) 在 Microsoft.AspNetCore.HostFilteringStartupFilter.<>c__DisplayClass0_0.b__0(IApplicationBuilder 应用程序) 在 Microsoft.AspNetCore.Hosting.Internal.AutoRequestServicesStartupFilter.<>c__DisplayClass0_0.b__0(IApplicationBuilder 构建器)在 Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication() crit:Microsoft.AspNetCore.Hosting.Internal.WebHost[6] 应用程序启动异常 System.InvalidCastException:无法转换类型为“Microsoft.Extensions.DependencyInjection.ServiceLookup”的对象.ServiceProviderEngineScope”以键入“Microsoft.Extensions.DependencyInjection.ServiceProvider”。在 F:\Developement\SpackkMVC\Spackk\Spackk\Startup.cs 中的 Spackk.Startup.Configure(IApplicationBuilder app, IHostingEnvironment env, IServiceProvider serviceProvider) 处:第 44 行 --- 抛出异常的上一个位置的堆栈跟踪结束 --- - 在 Microsoft.AspNetCore.Hosting.ConventionBasedStartup.Configure(IApplicationBuilder 应用程序) 在 Microsoft.AspNetCore.HostFilteringStartupFilter.<>c__DisplayClass0_0.b__0(IApplicationBuilder 应用程序) 在 Microsoft.AspNetCore.Hosting.Internal.AutoRequestServicesStartupFilter.<>c__DisplayClass0_0.b__0(IApplicationBuilder 构建器)在 Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()

这是启动时代码的样子

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using …
Run Code Online (Sandbox Code Playgroud)

c# dependency-injection dbcontext asp.net-mvc-5 asp.net-core

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

HotTowel EF6 MVC5 Angular Breeze版挑战

是否可以让HotTowel和EntityFramework 6一起工作?

我们的DataAccess Layer已升级到EF6.我们在Web层中对EntityFramework的唯一引用是Web.Config

 <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />

 <entityFramework>
   <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
  <parameters>
      <parameter value="Data Source=.; Integrated Security=True; MultipleActiveResultSets=True" />
      </parameters>
   </defaultConnectionFactory>
</entityFramework>
Run Code Online (Sandbox Code Playgroud)

我们无法更新ER版本6,因为HotTowel有一个Breeze Update可用.但是如何解决HotTowel

安装失败.回滚... install-package:将"Microsoft.AspNet.WebApi.OData 5.0.0"更新为"Microsoft.AspNet.WebApi.OData 4.0.30506"失败.无法找到与"Microsoft.AspNet.WebApi.OData 4.0.30506"兼容的"Breeze.Server.WebApi2"版本.

编辑: 我们正在使用KNOCKOUT.js库版HotTowel.

entity-framework breeze entity-framework-6 hottowel asp.net-mvc-5

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