我正在尝试将ASP.NET MVC webform迁移到ASP.NET Core MVC.目前,我在Request.UrlReferrer上课时遇到了麻烦.
原来的行是:
[HttpPost]
public async Task<ActionResult> ContactUsFormSubmit(ContactUs request)
{
var siteUrl = Request.UrlReferrer.ToString().ToLower();
....
}
Run Code Online (Sandbox Code Playgroud)
但是,使用ASP.NET Core时,UrlReferrer不可用.我发现了以下内容:
Request.Headers["Referer"]
Run Code Online (Sandbox Code Playgroud)
返回StringValues而不是String.我不确定我是否应该尝试使用这个或者是否有任何其他解决方案.Request.ServerVariables也不可用或者我没有命名空间.我的命名空间如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
Run Code Online (Sandbox Code Playgroud)
如果有人能指引我朝着正确的方向前进,我真的很感激.
我从我的项目中接受的答案中获得了这个确切的代码,我需要将其迁移到ASP.NET Core MVP中.
var env = Request.Headers.GetValues("environment").First();
Run Code Online (Sandbox Code Playgroud)
我如何在.NET Core中实现它?
我希望这不是一个重复的问题,因为我试图用新系统而不是旧系统来做这件事.如果有人在关于当前版本的链接中添加答案,我也会没事的.
编辑:http 5标题的所有类型在ASP.NET 5中消失了吗?我试过这个链接,但API可能已经改变了.我不认为这也是这个问题的重复.
我的情况与此链接非常相似,或者至少我的代码类似,我试图找到一种方法在.NET Core语法中应用相同的方法.
我的具体代码如下:
public partial class CompanyFormsContext : DbContext
{
public CompanyFormsContext()
: base("name=CompanyFormsContext")
{
}
public CompanyFormsContext(string connName)
: base("name=" + connName)
{
}
...
}
Run Code Online (Sandbox Code Playgroud)
我收到一个错误说:
错误CS1503参数1:无法从'string'转换为'Microsoft.EntityFrameworkCore.DbContextOptions'CompanyForms..NETCoreApp,Version = v1.0
当我翻过括号base("name=CompanyFormsContext")或base("name=" = connName).
在.NET Core中实现此功能的正确方法是什么?
编辑:
我想分享我在appsettings.json文件中有关于数据库连接的以下信息:(但是,我在startup.cs中没有设置)
"Data": {
"CompanyFormsContext": {
"ConnectionString": "Server=(localdb)\\projectsv13;Database=companyforms;Trusted_Connection=True;"
},
"CompanyFormsContextQA": {
"ConnectionString": "Server=(localdb)\\projectsv13;Database=companyforms;Trusted_Connection=True;"
}
}
Run Code Online (Sandbox Code Playgroud)
我发现以下链接在Startup.cs中添加DbContextOptions没有在网站上注册数据存储,我想知道一个简单的protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)是否足以修复我的连接?
从链接:
services.AddEntityFramework(Configuration)
.AddSqlServer()
.AddDbContext<MyDbContext>(
options =>
options.UseSqlServer(Configuration.Get("Data:CompanyFormsContext:ConnectionString"))
);
Run Code Online (Sandbox Code Playgroud)
我的Startup.cs中是否需要这种服务?
我正在尝试将一个webform从ASP.NET MVC迁移到ASP.NET Core MVC.目前我正试图找到一种替代方法:
using System.Data.Entity.Spatial;
Run Code Online (Sandbox Code Playgroud)
因为它目前在.NET Core中不可用,或者我可能无法找到它.
有没有办法包括这个包?也许通过NuGet包?
PS.我简要阅读了Microsoft指南,但找不到与之相关的任何内容.对于可能处于类似情况的任何人,指南在此处:https: //docs.asp.net/en/latest/migration/mvc.html
(对不起,如果我写不出一个好问题,我想在这里习惯这个系统)
我正在将一个webform(不是WebForm技术,一个精简的Web应用程序转换为webform功能)从ASP.NET MVC迁移到ASP.NET Core MVC.我目前最大的问题是我们在之前版本的webform中使用的静态类.此静态类使用.NET中可用但在.NET Core中不可用的包.
我理解对于这个静态类中的一些方法,我必须使用依赖注入来解决包问题.但是,无法将参数传递给静态类,使其成为.NET Core的"反模式".
我的Utils.cs静态类只有两个方法,RenderPartialToString和SendEmail.SendEmail非常简单,并且当前的.NET Core包没有问题.但是,我的静态类中有以下代码,不适用于当前版本.
public static class Utils
{
public static readonly string ApiUrl = ConfigurationManager.AppSettings["ApiUrl"];
public static readonly string ApiKey = ConfigurationManager.AppSettings["ApiKey"];
public static string RenderPartialToString(Controller controller, string viewName, object model)
{
controller.ViewData.Model = model;
using (StringWriter sw = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName);
ViewContext viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw);
viewResult.View.Render(viewContext, sw);
return "document.write('" + sw.GetStringBuilder().Replace('\n', ' ').Replace('\r', ' ').Replace("'","\\'").ToString() + "');"; …Run Code Online (Sandbox Code Playgroud) 我试图从.NET迁移几个View类到.NET Core,我遇到了缺少"Request"类方法的问题.以下问题可能与我的情况有关,但我不确定如何使用UriBuilder或任何其他答案用于此目的.我想问一些更具体和更不同的东西.
什么是ASP.NET Core MVC等同于Request.RequestURI?
我的具体代码如下:
<form id="contactUs" method="post" action="@Request.Url.GetLeftPart(UriPartial.Authority)@Url.Action("ContactUsFormSubmit")" accept-charset="utf-8">
Run Code Online (Sandbox Code Playgroud)
具体来说,我需要替换Request.Url.GetLeftPart(UriPartial.Authority)代码的一部分,因为我认为它不是.NET Core的可用包.
是否有替代.NET Core来获取Url的"权限"部分?由于我缺乏.NET/.NET Core的经验,我可以错过一个简单的参考等吗?
你好,新年快乐,(可以说直到周四)
我正在尝试更改CTabCtrl类中选项卡的颜色.我正在尝试创建自己的ReskinCTablCtrl,以便我可以在单独的类中调用它,并在整个程序中轻松使用它.
目前我能够改变CTabCtrl的背景颜色,但我无法修改标签本身.
我用ON_WM_ERASEBKGND()它画背景,它没有问题:
BOOL ReskinCTabCtrl::OnEraseBkgnd(CDC* pDC)
{
CRect rect;
GetClientRect(&rect);
CBrush myBrush(RGB(51, 51, 51)); // dialog background color
BOOL bRes = pDC->PatBlt(0, 0, rect.Width(), rect.Height(), PATCOPY);
pDC->SetBkColor(RGB(51, 51, 51));
pDC->FillRect(&rect, &myBrush);
return bRes;
}
Run Code Online (Sandbox Code Playgroud)
但是,我一直不知道更改标签颜色本身.它们仍然是默认的MFC颜色.我试图实施ON_WM_PAINT(),ON_WM_DRAWITEM()但没有任何成功.我想我可以使用OnDraw和DrawItem来获取特定的tab rect,类似于我在这个问题的最后发布的第二个链接示例.
void ReskinCTabCtrl::OnPaint() {
...
// paint the tabs first and then the borders
int nTab = GetItemCount();
int nSel = GetCurSel();
if (!nTab) // no pages added
return;
while (nTab--)
{
if (nTab != nSel)
{
dis.itemID …Run Code Online (Sandbox Code Playgroud) 我试图在ASP.NET Core MVC中使用ICompositeViewEngine替换System.Web.Mvc中的ViewEngine,因为它在.NET Core中不再可用.我通常尝试在此项目中将webform从ASP.NET迁移到ASP.NET Core.
我找到了以下解决方案:MVC 6 Controller中的ControllerContext和ViewEngines属性在哪里?我相信这可以解决我的问题.我还在github问题中找到了与ServiceProvider类似的引擎创建:https://github.com/aspnet/Mvc/issues/3091
但是,我不确定我可能会缺少哪些依赖项或框架,因为我是.NET的新手.我有以下命名空间:
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.ViewEngines;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using Microsoft.Extensions.DependencyInjection;
Run Code Online (Sandbox Code Playgroud)
我认为这可能与我的问题有关.
我原来的代码是:
public static string RenderPartialToString(Controller controller, string viewName, object model)
{
controller.ViewData.Model = model;
using (StringWriter sw = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName);
ViewContext viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw);
viewResult.View.Render(viewContext, sw);
return "document.write('" + sw.GetStringBuilder().Replace('\n', ' ').Replace('\r', ' ').Replace("'","\\'").ToString() + "');";
}
}
Run Code Online (Sandbox Code Playgroud)
现在我尝试使用以下任一方法:
var engine = Resolver.GetService(typeof(ICompositeViewEngine)) as ICompositeViewEngine;
var …Run Code Online (Sandbox Code Playgroud) 这是一个非常简单的场景,但我一直在努力寻找答案。
助手.ts:
export function foo() {
bar();
}
export function bar() {
// do something
}
Run Code Online (Sandbox Code Playgroud)
helpers.spec.ts:
import { foo, bar } from "./helpers";
describe("tests", () => {
it("example test", () => {
const barSpy = // how can i set this up?
foo();
expect(barSpy).toHaveBeenCalled();
});
});
Run Code Online (Sandbox Code Playgroud)
我不能这样做const spy = jest.spyOn(baz, 'bar');,因为我没有模块/类来代替“baz”。它只是一个导出函数。
编辑: Jest 模拟内部函数已被建议作为重复项,但不幸的是它对我的场景没有帮助。
该问题的解决方案:
移至单独的模块:我无法针对我的场景执行此操作。如果我测试应用程序中的每个功能,这将导致我创建 10 个新文件,这并不理想。(澄清一下,我认为这个解决方案可行,但我不能将它用于我的场景。我已经在这个测试文件中成功模拟了一个单独的文件函数。)
将模块导入自身:
helpers.spec.ts:
import * as helpers from "./helpers";
describe("tests", () => {
it("example test", () => { …Run Code Online (Sandbox Code Playgroud) c# ×7
.net ×5
asp.net-core ×5
asp.net ×4
asp.net-mvc ×2
.net-core ×1
c++ ×1
ctabctrl ×1
javascript ×1
jestjs ×1
mfc ×1
mocking ×1
typescript ×1
unit-testing ×1