我试图在REST API上启用版本控制,其中版本在标题中指定为"api-version":2.
根据这个教程,我只需要创建
VersionConstraint : IHttpRouteConstraint
和
VersionedRoute: RouteFactoryAttribute
用法是将[VersionedRoute("api/controllerName", 2)]属性应用于控制器,这是为特定版本设计的(例如,在这种情况下为版本2).
这一切都很好,但不幸的是,它全部在MVC5中,而我正在使用MVC6.因此,RouteFactoryAttribute并IHttpRouteConstraint不能正常工作.
我设法找到IRouteConstraint替换IHttpRouteConstraint(希望它可以工作),但我找不到替代品RouteFactoryAttribute.
如果有人可以使用MVC 6提供这样的示例,或者至少提到正确的类(理想情况下使用命名空间),我需要继承吗?
.net asp.net-web-api asp.net-core-mvc api-versioning asp.net-core
调试在使用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 库.
1.0.0-rc1-update1DNX运行时.我已经卸载了所有其他运行时.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)在Modules窗口中,我可以看到项目符号未加载:
我怎样才能解决这个问题?
我发现只有在同时运行多个启动项目时才会出现此问题.运行单个项目时,调试在解决方案中的所有项目中都能正常运行.
我不知道如何解决这个问题以及它为什么会发生.
我有一个异步方法,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) 在我的一些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
我是单元测试的新手,我正在尝试测试我写的一些.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件事情.
LoginView并看到错误消息.所以我想做一个测试,看看它们是否正常工作.这就是为什么我需要让用户来自主页,看看他们是否会被重定向到以后,如果他们来自一个安全的页面,他们会重新定向到以后.
我也是使用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) 我们的网络应用程序流程定期重新启动,我们无法确定原因.
在查看应用程序事件时(使用Azure门户中的"诊断和解决问题"刀片),Info"IIS AspNetCore模块"中存在大量以下日志
Failed to gracefully shutdown process '14040'.
Run Code Online (Sandbox Code Playgroud)
Application 'MACHINE/WEBROOT/APPHOST/myapplication__xxxx' started process '31628' successfully and is listening on port '17663'.
Run Code Online (Sandbox Code Playgroud)
在我们的应用程序日志中没有任何可疑的资源使用情况.
解决这些流程重启背后原因的最佳方法是什么?
在Web应用程序的诊断日志中进行Web日志记录之后,我现在每次重新启动后都会从W3SVC-WP中记录错误,但消息是无意义的:
1<br/>5<br/>50000780
Run Code Online (Sandbox Code Playgroud)
FailedRequestTracing模块无法将缓冲事件写入日志文件以查找与故障定义匹配的请求.在更正此情况之前,不会生成任何日志.问题在最后的%2分钟内至少发生了1次.数据是错误的.
我不确定这是否与我们的诊断日志配置有关,但似乎不太可能.
根据Brando Zhang的建议,我使用了Web App Crash Diagnoser扩展,并尝试在我的应用程序进程和w3wp上监视第二次机会未处理的异常,但没有任何东西被抛弃.
根据我的理解,第一次机会异常不会导致进程崩溃,因此无需监视这些内容.
azure-web-sites iis-8 azure-app-service-plans azure-web-app-service asp.net-core
我有以下方法返回一个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)
有没有更好的方法来做到这一点?
我使用实体框架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
当一个请求需要超过 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) 是否无法重命名Azure存储表?
我似乎无法在网上找到任何东西(甚至不是cmdlet).Visual Studio Server Explorer,Cloud Storage Studio或TableXplorer中没有此选项.
.net ×4
c# ×4
asp.net-core ×3
asp.net-mvc ×1
async-await ×1
azure ×1
azure-aks ×1
dnx ×1
ienumerable ×1
iis-8 ×1
kubernetes ×1
lazy-loading ×1
linq ×1
nuget ×1
nunit ×1
unit-testing ×1