我希望下面的示例控制器返回没有内容的状态代码418.设置状态代码很容易,但似乎需要做一些事情来发出请求结束的信号.在ASP.NET Core之前的MVC或WebForms中可能是一个调用,Response.End()但它如何在ASP.NET Core中Response.End不存在?
public class ExampleController : Controller
{
[HttpGet][Route("/example/main")]
public IActionResult Main()
{
this.HttpContext.Response.StatusCode = 418; // I'm a teapot
// How to end the request?
// I don't actually want to return a view but perhaps the next
// line is required anyway?
return View();
}
}
Run Code Online (Sandbox Code Playgroud) 从表面上看,适用于 Visual Studio 2022 的新的基于 AI 的 IntelliCode 似乎很酷。因此,当我安装 VS2022 并询问我是否允许在我的代码上训练模型时,我说当然,因为我想看看它如何改善开发人员体验。
但现在我已经使用 VS2022 编码一周了,我发现与 VS2019 相比,在编辑器中使用 300K 行代码库总是感觉很慢。我什至看到过一些奇怪的东西,我确信我输入了一件事,但代码却被分割成完全不同的东西,有时是我正在工作的上方的几行代码。不知怎的,VS2022编辑器和我不同步。另外,在使用编辑器时,我听到机器上的风扇高速运转,表明我的机器正在非常努力地工作。我不记得 VS2019 中有过这种情况。因此,解决所有这些问题我的第一个想法是在 VS2022 中恢复更多 VS 2019 IntelliCode 体验。
所以我进入Tools> Options> IntelliCode>General来开启新功能。我仍然希望拥有像 VS2019 中那样的 IntelliCode,但我想关闭新的 AI 驱动模型,这些模型(理论上)会减慢我的编辑体验。查看设置时,不清楚要更改哪些设置。更糟糕的是,甚至不清楚何时启用或禁用某些功能。他们都表现出来了Default。
查看Microsoft Docs也没有多大帮助。它不提供有关Default默认启用或默认禁用这些选项中的哪些选项的任何信息。
我猜我可能想禁用Automatic model training,也许C# deep-learning base model for completions。但我应该禁止其他人吗?如果我确实关闭了,C# deep-learning base model for completions我是否会禁用 VS2019 中我想要的功能?我启动了 VS2019 来检查它的 IntelliCode 选项,可惜所有设置也都设置好了Default。所以我既不知道之前启用了什么,也不知道现在启用了什么。我只知道我的编辑经历并不让我开心。
谁能告诉我如何配置这些设置,以便我拥有在 VS2019 中享受的 IntelliCode 体验,而无需承担 …
所以我有一个 C# 类库项目,我只打算在 Windows 上使用。它包含一些使用System.Drawing.Image仅在 Windows 上可用的类的类。升级到 Visual Studio 2022 并将目标框架设置为 .NET 6.0 后,我看到一堆警告:
\n\n\n
CA1416“此调用站点可在所有平台上访问。\'SomeClass.SomeMethod\' 仅在以下平台上受支持:\'windows\'。
请参阅下面的屏幕截图了解一些示例:
\n\n从某种意义上说,VS2022 扫描了库并找到了我在库中使用的所有平台特定代码,这很酷。但我想告诉 VS,我只打算在 Windows 上使用该库,它可以消除所有这些警告。
\n首先,我检查了Target framework项目属性中的选项,但没有看到任何 Windows 特定目标。
然后我决定直接编辑项目.csproj并更改Target framework
<TargetFramework>net6.0</TargetFramework>\nRun Code Online (Sandbox Code Playgroud)\n到
\n<TargetFramework>net6.0-windows</TargetFramework>\nRun Code Online (Sandbox Code Playgroud)\n但是,遗憾的是,即使在重新编译之后,警告也没有消失。然后我读了一些警告CA1416,果然Microsoft Docs中说,评估此警告时会忽略目标框架名称,但是,VS 确实根据影响此警告的 TFM 向项目添加了一个属性,但是仅当项目配置为AssemblyInfo.cs动态生成文件时,它才会这样做。但是,唉,我的项目是AssemblyInfo.cs作为实际文件维护的,而不是在构建时自动生成的。
因此,此时,我已准备好踢球并禁用CA1416我的项目的警告。因此,在项目的.proj文件中,我添加了CA1416发布和调试版本,如下所示:
<PropertyGroup Condition="\'$(Configuration)|$(Platform)\'==\'Debug|AnyCPU\'">\n <NoWarn>1701;1702;CA1416;</NoWarn>\n</PropertyGroup>\n\n<PropertyGroup Condition="\'$(Configuration)|$(Platform)\'==\'Release|AnyCPU\'">\n <NoWarn>1701;1702;CA1416;</NoWarn>\n</PropertyGroup>\nRun Code Online (Sandbox Code Playgroud)\n … c# code-analysis visual-studio microsoft.codeanalysis .net-6.0
我知道asp.net核心有一个非常灵活的新配置系统,这很棒.但是我喜欢从.net 4.x开始的基于web.config的配置系统.例如,可以将注释放在web.config文件中,因为它是一个xml文件.对我而言,值得坚持使用xml,而不是采用闪亮的新json方法.[ 更新:我现在明白json方法也支持文件中的注释.]
因此,如果我有一个针对完整框架的Asp.Net核心Web项目,我似乎应该可以使用基于web.config的System.Configuration.ConfigurationManager.AppSettings[key]方法来获取设置.
但是当我尝试时,该值总是返回null(至少在使用VS2015的IIS Express时).
它应该工作正常吗?关于我可能会看到什么的任何想法?
Web.config文件
<configuration>
<appSettings>
<add key="SomeSetting" value="true"/>
</appSettings>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
</handlers>
<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/>
</system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)
代码访问设置:
string key = "SomeSetting";
string setting = ConfigurationManager.AppSettings[key];
if (setting == null)
throw new Exception("The required configuration key " + key + " is missing. ");
Run Code Online (Sandbox Code Playgroud)
更新
经过更多的研究,我现在明白为什么它不起作用,但我还没有找到解决方法.根本原因似乎是ConfigurationManager在不同的文件中而不是在web.config中查找配置信息.
这可以通过查看AppDomain.CurrentDomain.SetupInformation.ConfigurationFile财产来看出.在我的情况下,而不是指向website_folder\web.config它,而是指向website_folder\bin\Debug\net461\win7-x64\wwwGiftOasisResponsive.exe.Configwebsite_folder是包含我的网站的文件夹的路径.
文档和intellisense说AppDomain.CurrentDomain.SetupInformation.ConfigurationFile是一个可设置的属性,但当我尝试时,我发现它设置它不会改变它的值.很奇怪.
所以,虽然我现在看到问题是什么,但我似乎无法找到解决问题的方法.
假设我有一个控制器使用基于属性的路由来处理请求的/ admin/product网址,如下所示:
[Route("admin/[controller]")]
public class ProductController: Controller {
// GET: /admin/product
[Route("")]
public IActionResult Index() {
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
现在让我们说我希望将我的视图组织在一个文件夹结构中,该文件夹结构大致反映了它们相关的url路径.所以我希望这个控制器的视图位于这里:
/Views/Admin/Product.cshtml
Run Code Online (Sandbox Code Playgroud)
更进一步,如果我有这样的控制器:
[Route("admin/marketing/[controller]")]
public class PromoCodeListController: Controller {
// GET: /admin/marketing/promocodelist
[Route("")]
public IActionResult Index() {
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
我希望框架在这里自动查找它的视图:
Views/Admin/Marketing/PromoCodeList.cshtml
Run Code Online (Sandbox Code Playgroud)
理想情况下,用于通知视图位置框架的方法将基于基于属性的路由信息以一般方式工作,而不管涉及多少URL段(即,嵌套的程度有多深).
如何指示Core MVC框架(我目前正在使用RC1)在这样的位置查找控制器的视图?
asp.net-core-mvc asp.net-core asp.net-core-1.0 asp.net-core-2.1
假设我有一些看起来像这样的网址:www.myhost.com/mypage?color = blue
在Asp.Net Core中,我希望通过执行以下操作获取颜色查询参数值:
string color = Request.Query["color"];
但事实证明,Request.Query["color"]返回类型的值StringValues而不是string.这是为什么?
显然,StringValues类型可以包含一个字符串数组,并且包含对隐式转换的支持string[]很酷,但为什么查询参数值需要?
必须获得这样的价值似乎很奇怪:
string color = Request.Query["color"].ToString();
更糟糕的是,检查一个值以查看是否指定了查询参数不能再这样做了
if(Request.Query["color"] == null) {
//param was not specified
}
Run Code Online (Sandbox Code Playgroud)
但必须像这样检查
if(Request.Query["color"].Count == 0) {
//param was not specified
}
Run Code Online (Sandbox Code Playgroud)
由于单个查询参数不能有多个值(据我所知)为什么Request.Query["color"]返回一个StringValues对象而不是一个字符串?
我很欣赏 Visual Studio 团队不断努力为开发人员改进 VS 环境。然而,我发现 VS 2022 编辑器中使用的字体和颜色太大了,而且很费脑力。我非常想更改 VS 2022 文本编辑器字体和颜色以匹配我在 VS 2019 中使用的字体和颜色。
不幸的是,这并不像进入“工具”>“选项”>“环境”>“字体和颜色”并将字体从Cascadia Code回更改为Consolas. 当然可以做到这一点,这是向前迈出的一步,但字体颜色是浅色的。这显然是因为 VS 2022 中的字体颜色总体上变浅了,以部分补偿Cascadia Code字体非常重的事实。如果您想保留Cascadia Code作为编辑器字体,这当然是有道理的。但我不这么认为。我想切换回Consolas,并且我也想要 VS 2019 使用的字体颜色。
那么有人知道让 VS 2022 编辑器使用 VS 2019 使用的文本颜色编码的简单方法吗?
我想通过一个JsonResultAsp.Net Core中间件来回应,但是如何实现这一点并不明显.我用Google搜索了很多但收效甚微.我可以通过一个JsonResult全局来回应,通过IActionFilter设置ActionExecutedContext.Result到JsonResult那个很酷.但在这种情况下,我想JsonResult从我的中间件中有效地返回一个.怎么能实现呢?
我提出了关于问题的问题,JsonResult IActionResult但理想情况下,解决方案可以使用任何IActionResult来编写来自中间件的响应.
我正在使用VS 2015 Update 2和配置为调试模式的asp.net 5 Web项目.当我使用F5运行项目来调试它并达到断点时,即使它们在范围内,也无法在监视窗口中观察到某些变量.此外,如果我将鼠标悬停在这些变量上,则不会显示任何值.
如果我使用相同的visual studio来创建一个空Web项目并添加一个webform并将代码放在load方法中,那么调试器工作正常.也就是说,我可以在监视窗口中看到变量,我可以通过将它们悬停在它们上面来查看它们的值.我从中收集到,问题的根本原因不是VS2015 Update 2,而是与项目或解决方案配置有关,可能特定于asp.net 5 web项目.
我在网上搜索答案,并在尝试调试编译器优化代码时遇到类似问题.但是我在调试模式下运行解决方案.有什么建议?
我知道在调试时当前上下文中不存在Variable,但它适用于不同版本的visual studio,并且那里提供的解决方案无法解决我的问题.
在 ASP.NET Core 6 中,当发布为独立的 win-x86 网站时,会在发布文件夹中创建一堆语言文件夹。
这些文件夹包含一个 dll,即System.Private.ServiceModel.resources.dll. 据我所知,这些文件夹不存在于 Asp.NET 5 中,并且它们给部署添加了我不希望有的混乱/噪音。
System.Private.ServiceModel.resources.dll您能否解释为什么此类部署需要所有这些本地化版本?另外,由于我的网站只有英文,我可以安全地删除所有语言文件夹(即 cs、de、es、fr、it、ja、ko、pl、pt-BR、ru、tr、zh-Hans、zh-汉特)?最后,有没有更好的方法让这些消失呢?例如某处的某些配置?
asp.net-core ×6
c# ×4
.net-6.0 ×2
asp.net ×1
asp.net-mvc ×1
debugging ×1
intellicode ×1
json ×1
middleware ×1