小编Kol*_*Net的帖子

如何在ASP.NET Core 1.0的DI中的Startup类中添加IHttpContextAccessor?

在ASP.NET Core RC 1中,我使用以下代码检索上下文的值(页面的完整地址).然后我在配置中记录了这个值.

public class Startup
{
        public IConfigurationRoot Configuration { get; set; }
        private IHostingEnvironment CurrentEnvironment { get; set; }
        private IHttpContextAccessor HttpContextAccessor { get; set; }
        public Startup(IHostingEnvironment env,
                IHttpContextAccessor httpContextAccessor)
            {                
                var builder = new ConfigurationBuilder()
                    .SetBasePath(env.ContentRootPath)
                    .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                    .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);

                if (env.IsDevelopment())
                {
                    builder.AddUserSecrets();
                }
                builder.AddEnvironmentVariables();
                Configuration = builder.Build();
                CurrentEnvironment = env;
                HttpContextAccessor = httpContextAccessor;
            }
        public void ConfigureServices(IServiceCollection services)
        {
        ...

        services.AddOptions();
        services.Configure<WebAppSettings>(configuration);
        services.Configure<WebAppSettings>(settings =>
        {
            ...
            settings.WebRootPath = CurrentEnvironment.WebRootPath; …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-core-mvc asp.net-core asp.net-core-1.0

19
推荐指数
2
解决办法
2万
查看次数

混合 C# 和 HTML Helper 标签 ASP.NET MVC 6 (ASP.NET Core)

我在 ASP.NET MVC 6 中使用新的 Helper 标签。

    <form asp-area="DAS"
          asp-controller="Report"
          asp-action="Add"
          asp-route-id="@Model.id"
          asp-route-incBalance="@Model.incBalance"
          asp-route-dateSet="@Model.dataStart.ToString("yyyy-MM-dd")"
          asp-route-dateNext="@Model.dataEnd.ToString("yyyy-MM-dd")"
          method="post" role="form">
    </form>
Run Code Online (Sandbox Code Playgroud)

我想路由属性:

asp-route-dateNext="@Model.dataEnd.ToString("yyyy-MM-dd")"
Run Code Online (Sandbox Code Playgroud)

仅适用于:

          {
              if (Model.incBalance == 0)
              {
                  asp-route-dateNext="@Model.dataEnd.ToString("yyyy-MM-dd")"
              }
          }
Run Code Online (Sandbox Code Playgroud)

结果,我想得到这样的东西:

    <form asp-area="DAS"
          asp-controller="Report"
          asp-action="Add"
          asp-route-id="@Model.id"
          asp-route-incBalance="@Model.incBalance"
          asp-route-dateSet="@Model.dataStart.ToString("yyyy-MM-dd")"
          {
             if (Model.incBalance == 0)
             {
                 asp-route-dateNext="@Model.dataEnd.ToString("yyyy-MM-dd")"
             }
          }
          method="post" role="form">
    </form>
Run Code Online (Sandbox Code Playgroud)

我收到这些错误:

TagHelper 属性必须格式良好。

          if (Model.incBalance == 0)
Run Code Online (Sandbox Code Playgroud)

标签助手“表单”在元素的属性声明区域中不得包含 C#。

              asp-route-dateNext="@Model.dataEnd.ToString("yyyy-MM-dd")"
Run Code Online (Sandbox Code Playgroud)

我正在使用 Visual Studio 2015 更新 1

更新 1: 我也试过这个选项:

@(Model.incBalance == 0 ? "asp-route-dateNext=" + Model.dataEnd.ToString("yyyy-MM-dd") : string.Empty)
Run Code Online (Sandbox Code Playgroud)

但错误仍然存​​在: …

c# asp.net-core-mvc tag-helpers asp.net-core asp.net-core-1.0

7
推荐指数
2
解决办法
8746
查看次数

如何在ASP.NET MVC 6中继续使用ModelState和RedirectToAction?

我有一个删除对象的方法.删除不属于视图,并且是"EditReport"中的"删除"按钮.成功删除"报告"上的重定向后.

[HttpPost]
[Route("{reportId:int}")]
[ValidateAntiForgeryToken]
public IActionResult DeleteReport(int reportId)
{
    var success = _reportService.DeleteReportControl(reportId);
    if (success == false)
    {
        ModelState.AddModelError("Error", "Messages");
        return RedirectToAction("EditReport");
    }
    ModelState.AddModelError("OK", "Messages");
    return RedirectToAction("Report");
}
Run Code Online (Sandbox Code Playgroud)

在ASP.NET MVC 5中,我使用以下属性在方法之间保存ModelState.我从这里开始:https://stackoverflow.com/a/12024227/3878213

public class SetTempDataModelStateAttribute : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        base.OnActionExecuted(filterContext);         
        filterContext.Controller.TempData["ModelState"] = 
           filterContext.Controller.ViewData.ModelState;
    }
}

public class RestoreModelStateFromTempDataAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        base.OnActionExecuting(filterContext);
        if (filterContext.Controller.TempData.ContainsKey("ModelState"))
        {
            filterContext.Controller.ViewData.ModelState.Merge(
                (ModelStateDictionary)filterContext.Controller.TempData["ModelState"]);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是在ASP.NET MVC 6 RC 1(ASP.NET Core 1.0)中,此代码不起作用. …

c# asp.net-mvc asp.net-core-mvc asp.net-core asp.net-core-1.0

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

ASP.NET MVC 6 中的属性路由正则表达式约束错误

我添加以下路由属性:

[HttpGet]
[Route("add")]
[Route(@"{id:int}/{inn:regex(^[0-9]+$)}/incBalance:range(0,1)/{dateSet:datetime}/{dateNext:datetime}")]
public IActionResult Add(int id, string inn, int incBalance, DateTime dateSet, DateTime dateNext)
{
  ....
}
Run Code Online (Sandbox Code Playgroud)

在执行时出现错误:

An unhandled exception occurred while processing the request.

InvalidOperationException: The following errors occurred with attribute routing information:

Error 1:
For action: 'WebProject.Areas.DAS.Controllers.ReportController.Add'
Error: While processing template 'das/report/[action]/{id:int}/{inn:regex(^[0-9]+$)}/incBalance:range(0,1)/{dateSet:datetime}/{dateNext:datetime}', a replacement value for the token '0-9' could not be found. Available tokens: 'action, area, controller'.
Run Code Online (Sandbox Code Playgroud)

我删除regex(^[0-9]+$),一切正常

c# regex asp.net-core-mvc asp.net-core asp.net-core-1.0

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