我最近将 .Net Framwork AspNet MVC 应用程序升级为 AspNet Core 3 MVC 应用程序,我希望能够更改视图、保存和刷新浏览器窗口以查看更改。现在看来我每次都必须进行构建才能看到任何更改。有没有办法改变这种行为?
这是托管在 IIS 10 下
我的MVC webapp允许用户添加和删除图像.UI调用ImageService.SaveImage(...)
我的业务层,内部使用一个标志告诉方法保存到Azure或文件系统.我最终可能会添加S3,我认为这里的界面效果很好.
这就是我在ImageService类中对代码进行映像的方法.它不关心文件的保存方式或位置.
// Service the UI uses
public static class ImageService
{
public static void SaveImage(byte[] data, IImageProvider imageProvider)
{
string fileName = "some_generated_name.jpg"
imageProvider.Save(fileName, data);
}
}
Run Code Online (Sandbox Code Playgroud)
所以我创建了这些实现
public interface IImageProvider
{
void Save(string filename, byte[] imageData);
byte[] Get(string filename);
void Delete(string filename);
}
// File system implementation
public class FSImageProvider : IImageProvider
{
public void Delete(string filename)
{
File.Delete(filename);
}
public byte[] Get( filename)
{
return File.ReadAllBytes(filename);
}
public void Save(string filename, byte[] imageData)
{ …
Run Code Online (Sandbox Code Playgroud) 我正在玩 EF Core 3 并编写一些单元测试,但似乎无法为视图设置测试数据。
当我尝试保存时,出现错误:
无法跟踪类型实例,因为它没有主键。只能跟踪具有主键的实体类型
public class EFContext : DbContext
{
public DbSet<ViewItem> ViewItems { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<ViewItem>().HasNoKey().ToView("vTestView");
}
}
using (EFContext efContext = new EFContext())
{
efContext.ViewItems.Add(new ViewItem
{
Name = "This is test item #1"
});
efContext.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud) 刚刚重新完成了我的机器.
它说,打开一个运行.Net 4.5.1的上一个项目
"C#项目的目标是.NETFramework,Version = v4.5.1,这台机器上没有安装"
安装4.5.2,重新安装VS,重新安装IIS,.NET,并执行aspnet_iisreg -i.
如果我创建一个新项目,则4.5.1不在目标框架列表中.
4.5.2安装在机器上并显示在添加/删除程序列表中.
我已经阅读了本教程,并且能够生成.cs文件,但其中不包含任何服务或rpc定义。
我已经protoc
从项目目录中添加到PATH中。
protoc project1.proto --csharp_out="C:\output" --plugin=protoc-gen-grpc="c:\Users\me\.nuget\packages\grpc.tools\1.8.0\tools\windows_x64\grpc_csharp_plugin.exe"
控制台中无错误输出
我无法让路由与 kestrel 一起工作。
我找不到关于如何在 netcore 控制台应用程序中实现这一点的任何好的教程。
我想构建一个简单的 Web 服务器,它将有 2-3 个我可以访问的端点。
public class WebServer
{
public static void Init()
{
IWebHostBuilder builder = CreateWebHostBuilder(null);
IWebHost host = builder.Build();
host.Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args)
{
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.Build();
return WebHost.CreateDefaultBuilder(args)
.UseUrls("http://*:5000")
.UseConfiguration(config)
.UseStartup<Startup>();
}
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddRouting();
// ????
}
public void Configure(IApplicationBuilder app)
{
// ????
}
}
}
Run Code Online (Sandbox Code Playgroud) 如何返回expected
作为IEnumerable<T>
给定下面的代码?
public List<object> expected = new List<object>();
public IEnumerable<T> SqlQuery<T>(string sql)
{
// Return expected as IEnumerable<T>
}
Run Code Online (Sandbox Code Playgroud)
(这是为单元测试创建的类,用于模拟实体框架SqlQuery<T>
方法.我们可以提前设置我们的预期结果,并让它返回您期望的结果.)
var results = ObjectContext.ExecuteStoreQuery<T>("exec MyStoredProc");
Run Code Online (Sandbox Code Playgroud)
MyStoreProc 始终返回 1 行,其中 9 列均为 int。
我不想为此一次性使用类型数据创建类或结构。
在不创建类的情况下执行此操作的最干净方法是什么?
在我的控制器操作中,我正在捕获异常并在冒泡到Application_Error()方法之前添加一些额外的信息
ActionResult Index()
{
try
{
var i = 1 / 0;
}
catch(Exception e)
{
throw new Exception("My new Exception!", e)
}
}
private void Application_Error(object sender, EventArgs e)
{
// Breakpoint shows original error! Not my newly thrown one!
var exception = Server.GetLastError().GetBaseException();
}
Run Code Online (Sandbox Code Playgroud) 我刚刚构建了一台新 PC,安装了我的开发工具,连接到 TFS 并下载了我的项目。现在我的大部分参考文献都转向了 EF、jQuery 等。
包文件夹丢失了所有 .dll,如果我尝试使用 NuGet 恢复,则不会发生任何情况。如果我使用 NuGet 管理器作为解决方案,则没有“强制”重新安装选项。
NuGet 似乎更像是一种障碍而不是帮助。
我有一个用于单元测试的模拟数据库类
在每个单元测试中,我创建了一个MockDB对象,并且从先前运行的测试中添加的用户已经存在但是静态List对象会持续多长时间,因为该类未被标记为static
?
public class MockDB
{
public static List<User> users = new List<User>();
public void Add(User user)
{
users.Add(user);
}
public void Remove(User user)
{
users.Remove(user);
}
public User Get(int userId)
{
return users.Where(u => u.UserId == userId);
}
}
Run Code Online (Sandbox Code Playgroud) 如何string[]
从IConfigurationRoot
对象返回?
文件存在并设置为复制到输出
码
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("settings.json", optional: false, reloadOnChange: false);
_configuration = builder.Build();
var arr = _configuration["stringArray"]; // this returns null
var arr1 = _configuration["stringArray:0"]; // this works and returns first element
Run Code Online (Sandbox Code Playgroud)
Settings.json
{
"stringArray": [
"myString1",
"myString2",
"myString3"
]
}
Run Code Online (Sandbox Code Playgroud) c# ×8
.net ×2
asp.net-core ×2
appsettings ×1
asp.net ×1
ef-core-3.0 ×1
generics ×1
grpc ×1
ienumerable ×1
iis ×1
interface ×1
nuget ×1