小编Dav*_*New的帖子

MVC6的VersionedRoute属性实现

我试图在REST API上启用版本控制,其中版本在标题中指定为"api-version":2.

根据这个教程,我只需要创建

VersionConstraint : IHttpRouteConstraint

VersionedRoute: RouteFactoryAttribute

用法是将[VersionedRoute("api/controllerName", 2)]属性应用于控制器,这是为特定版本设计的(例如,在这种情况下为版本2).

这一切都很好,但不幸的是,它全部在MVC5中,而我正在使用MVC6.因此,RouteFactoryAttributeIHttpRouteConstraint不能正常工作.

我设法找到IRouteConstraint替换IHttpRouteConstraint(希望它可以工作),但我找不到替代品RouteFactoryAttribute.

如果有人可以使用MVC 6提供这样的示例,或者至少提到正确的类(理想情况下使用命名空间),我需要继承吗?

.net asp.net-web-api asp.net-core-mvc api-versioning asp.net-core

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

ASP.NET 5,DNX和Kestrel:没有遇到断点

调试在使用Kestrel托管的ASP.NET 5 API项目中引用的DNX项目时,不会遇到断点(所有这些项目都位于同一解决方案和src文件夹中).使用IIS Express进行调试工作正常.

可以采取哪些故障排除步骤来解决此问题?

在调试时没有使用DNX项目创建二进制文件或PDB,所以我不确定从哪里开始.

project.json命令:

"commands": {
  "web": "Microsoft.AspNet.Server.Kestrel"
},
Run Code Online (Sandbox Code Playgroud)

项目属性:

项目属性

注意:1.0.0-rc1-final在所有项目中使用RC1 库.

编辑:

  • Startup.cs项目中的断点很好,但在其他项目中却没有.
  • 我已经仔细检查并重新安装了1.0.0-rc1-update1DNX运行时.我已经卸载了所有其他运行时.
  • 我已经确认PATH正确反映了DNX运行时.
  • 我删除了所有project.lock.json文件并恢复了DNU.
  • 实际断点引脚为红色,并不表示应该有任何问题.
  • global.json正在使用正确的运行时:

    {
      "projects": [ "src", "test", "." ],
      "sdk": {
          "version": "1.0.0-rc1-update1",
          "runtime": "clr",
          "architecture": "x86"
      }
    }
    
    Run Code Online (Sandbox Code Playgroud)

编辑2:

在Modules窗口中,我可以看到项目符号未加载:

模块

我怎样才能解决这个问题?

编辑3:

我发现只有在同时运行多个启动项目时才会出现此问题.运行单个项目时,调试在解决方案中的所有项目中都能正常运行.

在此输入图像描述

我不知道如何解决这个问题以及它为什么会发生.

asp.net-core-mvc dnx kestrel-http-server asp.net-core

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

并行运行异步方法

我有一个异步方法,GetExpensiveThing()它执行一些昂贵的I/O工作.这就是我使用它的方式:

// Serial execution
public async Task<List<Thing>> GetThings()
{
    var first = await GetExpensiveThing();
    var second = await GetExpensiveThing();
    return new List<Thing>() { first, second };
}
Run Code Online (Sandbox Code Playgroud)

但由于这是一种昂贵的方法,我想并行执行这些调用.我本以为移动等待会解决这个问题:

// Serial execution
public async Task<List<Thing>> GetThings()
{
    var first = GetExpensiveThing();
    var second = GetExpensiveThing();
    return new List<Thing>() { await first, await second };
}
Run Code Online (Sandbox Code Playgroud)

这不起作用,所以我将它们包装在一些任务中,这有效:

// Parallel execution
public async Task<List<Thing>> GetThings()
{
    var first = Task.Run(() =>
    {
        return GetExpensiveThing();
    });

    var second = Task.Run(() =>
    { …
Run Code Online (Sandbox Code Playgroud)

c# task-parallel-library async-await

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

什么是EnsureNuGetPackageBuildImports目标?

在我的一些csproj文件中,我有这个,但有些不:

  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
  </Target>
Run Code Online (Sandbox Code Playgroud)

究竟是什么,为什么我需要它?没有它,我的其他项目正在恢复他们的包.

我正在使用VS2013和NuGet 2.8.

visual-studio nuget nuget-package visual-studio-2013 nuget-package-restore

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

如何测试Asp.net会员资格?

我是单元测试的新手,我正在尝试测试我写的一些.NET会员资料.

所以我试图检查我的VerifyUser方法,检查用户凭据是否有效.

所以这就是它的样子:

public bool VerifyUser(string userName, string password)
    {
        bool valid = Membership.ValidateUser(userName, password);
        return valid;
    }
Run Code Online (Sandbox Code Playgroud)

现在,每次我运行单元测试时都会失败.我知道我正在传递正确的凭据和内容.然后我突然意识到,也许我的测试项目(与我的真实项目在同一个解决方案下)可能需要自己的web.config文件,其中包含连接字符串和内容.或者应用程序配置文件,因为它是一个应用程序库项目.

那么我只是web.config从我的真实项目中复制文件并将其称为一天?或者我应该只从中取出零件?或者我离开了.

我的数据库正在使用自定义数据库,其.net成员资格与我的数据库合并.所以在我的配置文件中,我必须指定一个ManagerProvider和一个roleProvider.

这就是我的单元测试的样子

   [Test]
   public void TestVerifyUser()
   {
      AuthenticateUser authenitcate = new AuthenticateUser();
      bool vaild = authenitcate.VerifyUser("chobo3", "1234567");


      Assert.That(vaild, Is.True);
   }
Run Code Online (Sandbox Code Playgroud)

后来我在我的一个asp.net mvc ActionResult方法(准确的登录视图)我有这个:

FormsAuthentication.RedirectFromLoginPage(loginValidation.UserName,rememberMe);

那么现在我该如何编写一个能够完成用户操作的单元测试.假设他们从主页开始,然后单击登录页面并成功登录.我希望他们重定向到主页.

我不知道如何在代码中表示.我很确定这些RedirectFromLoginPage作品和那些我现在正在测试的东西.我正在测试我在登录ActionResult方法中可能发生的3件事情.

  1. 用户登录并将其发送回来.
  2. 用户无法登录并被发送回LoginView并看到错误消息.
  3. 用户已尝试转到安全状态,并已重定向到登录页面.如果登录成功,将通过ReturnUrl重定向回安全页面.

所以我想做一个测试,看看它们是否正常工作.这就是为什么我需要让用户来自主页,看看他们是否会被重定向到以后,如果他们来自一个安全的页面,他们会重新定向到以后.

我也是使用NUnit 2.5和VS2008 Pro的方式.


这就是我想要测试的内容.我正处于我试图查看用户是否有效的部分(if语句).我不知道如何测试它.

public ActionResult Login(string returnUrl, FormCollection form, bool rememberMe)
       {
            LoginValidation loginValidation = new LoginValidation(); …
Run Code Online (Sandbox Code Playgroud)

.net c# asp.net-mvc nunit unit-testing

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

Web App流程重新启动故障排除

我们的网络应用程序流程定期重新启动,我们无法确定原因.

在查看应用程序事件时(使用Azure门户中的"诊断和解决问题"刀片),Info"IIS AspNetCore模块"中存在大量以下日志

事件编号1005:

Failed to gracefully shutdown process '14040'.
Run Code Online (Sandbox Code Playgroud)

事件ID 1001:

Application 'MACHINE/WEBROOT/APPHOST/myapplication__xxxx' started process '31628' successfully and is listening on port '17663'.
Run Code Online (Sandbox Code Playgroud)

在我们的应用程序日志中没有任何可疑的资源使用情况.

解决这些流程重启背后原因的最佳方法是什么?

编辑1:

在Web应用程序的诊断日志中进行Web日志记录之后,我现在每次重新启动后都会从W3SVC-WP中记录错误,但消息是无意义的:

1<br/>5<br/>50000780
Run Code Online (Sandbox Code Playgroud)

应用事件

编辑2:

事件ID 2284指的是这个:

FailedRequestTracing模块无法将缓冲事件写入日志文件以查找与故障定义匹配的请求.在更正此情况之前,不会生成任何日志.问题在最后的%2分钟内至少发生了1次.数据是错误的.

我不确定这是否与我们的诊断日志配置有关,但似乎不太可能.

编辑3:

根据Brando Zhang的建议,我使用了Web App Crash Diagnoser扩展,并尝试在我的应用程序进程w3wp上监视第二次机会未处理的异常,但没有任何东西被抛弃.

根据我的理解,第一次机会异常不会导致进程崩溃,因此无需监视这些内容.

azure-web-sites iis-8 azure-app-service-plans azure-web-app-service asp.net-core

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

检查IEnumerable是否具有任何行而不枚举整个列表

我有以下方法返回一个IEnumerable类型T.该方法的实现并不重要,除了yield return延迟加载IEnumerable.这是必要的,因为结果可能有数百万项.

public IEnumerable<T> Parse()
{
    foreach(...)
    {
        yield return parsedObject;
    }
}
Run Code Online (Sandbox Code Playgroud)

问题:

我有以下属性可用于确定是否IEnumerable有任何项目:

public bool HasItems
{
    get
    {
        return Parse().Take(1).SingleOrDefault() != null;
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来做到这一点?

.net c# linq ienumerable lazy-loading

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

代码优先:将实体映射到现有数据库表

我使用实体框架6代码优先与现有数据库,但在将我的实体映射到数据库表时遇到问题.

通常,我会使用数据库优先方法并生成我的实体和上下文代码,但使用设计器已经成为一个巨大的痛苦.

我已经设置了Database.SetInitializer(null),因为我不希望EF更改我的架构.

数据库架构:

在此输入图像描述

守则一:

public class Project
{
    public int ProjectId { get; set; }

    public string Name { get; set; }

    public string Description { get; set; }
}

public class ReleaseControlContext : DbContext
{
    public ReleaseControlContext()
        : base(ConfigurationManager.ConnectionStrings["ReleaseControl"].ConnectionString) 
    {
        Database.SetInitializer<ReleaseControlContext>(null);
    }

    public DbSet<Project> Projects { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

来电代码:

using(var context = new ReleaseControlContext())
{
    var projects = context.Projects.ToList();
}
Run Code Online (Sandbox Code Playgroud)

抛出以下异常:

SqlException:无效的对象名称'dbo.Projects'.

这是因为我的数据库表是Project而不是Projects.我不想将我的上下文重命名DbSet<Project>为"Project",因为这在语义上是不正确的.

题:

我是否必须使用流畅的API /数据注释来在Project数据库表和DbSet<Project> Projects …

.net c# entity-framework entity-framework-5 entity-framework-6

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

NGINX 入口控制器在 60 秒后超时请求

当一个请求需要超过 60 秒来响应时,入口控制器似乎会反弹

从我可以看到我们的 NGINX 入口控制器在处理一个请求超过 60 秒后返回 504 给客户端。我可以从 NGINX 日志中看到这一点:

2019/01/25 09:54:15 [error] 2878#2878: *4031130 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 10.244.0.1, server: myapplication.com, request: "POST /api/text HTTP/1.1", upstream: "http://10.244.0.39:45606/api/text", host: "myapplication.com"
10.244.0.1 - [10.244.0.1] - - [25/Jan/2019:09:54:15 +0000] "POST /api/text HTTP/1.1" 504 167 "-" "PostmanRuntime/7.1.6" 2940 60.002 [default-myapplication-service-80] 10.244.0.39:45606 0 60.000 504 bdc1e0571e34bf1223e6ed4f7c60e19d
Run Code Online (Sandbox Code Playgroud)

第二个日志项显示上游响应时间请求时间均为 60 秒(请参阅此处的 NGINX 日志格式

但是我在入口配置中将所有超时值指定为 3 分钟:

apiVersion: extensions/v1beta1 …
Run Code Online (Sandbox Code Playgroud)

kubernetes kubernetes-ingress azure-aks nginx-ingress

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

重命名Azure存储表?

是否无法重命名Azure存储表?

我似乎无法在网上找到任何东西(甚至不是cmdlet).Visual Studio Server Explorer,Cloud Storage Studio或TableXplorer中没有此选项.

azure azure-table-storage

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