Tag: asp.net core mvc

ASP.NET核心MVC混合路由/ FromBody模型绑定和validation

我正在使用ASP.NET Core 1.1 MVC来构建JSON API。 给出以下模型和动作方法: public class TestModel { public int Id { get; set; } [Range(100, 999)] public int RootId { get; set; } [Required, MaxLength(200)] public string Name { get; set; } public string Description { get; set; } } [HttpPost(“/test/{rootId}/echo/{id}”)] public IActionResult TestEcho([FromBody] TestModel data) { return Json(new { data.Id, data.RootId, […]

如何在控制器中获取数据库上下文

我整天都在努力想要在默认的MVC 6项目的ManageController.cs中获取ApplicationDbContext 。 我上网了,谷歌搜索了很多,但似乎没有人像我一样有问题。 这可能很简单,但我无法弄清楚。 有人有想法吗? 这是我尝试过的: IServiceProvider service = new IServiceProvider(); var _context = service.GetService();

在ASP.NET Core MVC API控制器上对AuthorizeAttribute进行unit testing

我有一个ASP.NET核心MVC API与控制器需要进行unit testing。 控制器: using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using System.Threading.Tasks; namespace TransitApi.Api.Controllers { [Route(“api/foo”)] public class FooController : Controller { private IFooRepository FooRepository { get; } public FooController(IFooRepository fooRepository) { FooRepository = fooRepository; } [HttpGet] [Authorize(“scopes:getfoos”)] public async Task GetAsync() { var foos = await FooRepository.GetAsync(); return Json(foos); } } } 我必须能够对AuthorizeAttribute的有效性进行unit testing。 我们的代码库中存在缺少属性和不正确范围的问题。 这个答案正是我正在寻找的,但在Microsoft.AspNetCore.Mvc.Controller没有ActionInvoker方法意味着我无法这样做。 […]

如何使用ASP.NET Core进行流式处理

如何正确地在ASP.NET Core中传输响应? 有这样的控制器( 更新代码 ): [HttpGet(“test”)] public async Task GetTest() { HttpContext.Response.ContentType = “text/plain”; using (var writer = new StreamWriter(HttpContext.Response.Body)) await writer.WriteLineAsync(“Hello World”); } Firefox / Edge浏览器显示 你好,世界 ,Chrome / Postman报告错误: localhost页面无效 localhost意外关闭了连接。 ERR_INCOMPLETE_CHUNKED_ENCODING PS我即将流式传输大量内容,因此我无法提前指定Content-Length标头。

从动作返回文件时,流是否会被处置?

我正在写一个字符串到MemoryStream我需要将流返回到Controller Action,所以我可以将其作为文件发送下载。 通常,我将Stream包装在using语句中,但是,在这种情况下,我需要返回它。 我退货后还能处理吗? 或者我需要以某种方式自行处理它? //inside CsvOutputFormatter public Stream GetStream(object genericObject) { MemoryStream stream = new MemoryStream(); StreamWriter writer = new StreamWriter(stream, Encoding.UTF8); writer.Write(_stringWriter.ToString()); writer.Flush(); stream.Position = 0; return stream; } Controller返回文件的Action: [HttpGet] [Route(“/Discussion/Export”)] public IActionResult GetDataAsCsv() { var forums = _discussionService.GetForums(_userHelper.UserId); CsvOutputFormatter csvFormatter = new CsvOutputFormatter(new CsvFormatterOptions()); var stream = csvFormatter.GetStream(forums); return File(stream, “application/octet-stream”, […]

ASP.Net核心MVC中的本地化无法正常工作 – 无法找到资源文件

在尝试本地化我的应用程序时,我遵循了以下步骤: https : //docs.asp.net/en/latest/fundamentals/localization.html 这是我的代码: Startup.cs public List RequestCultureProviders { get; private set; } // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddLocalization(options => options.ResourcesPath = “Resources”); services.AddMvc() .AddViewLocalization(options => options.ResourcesPath = “Resources”) .AddDataAnnotationsLocalization(); services.AddOptions(); services.AddTransient(); services.AddTransient(); } public void Configure(IApplicationBuilder […]

MVC 6中的HtmlHelpers

我正在尝试将此代码移植到mvc 6,感谢任何帮助,代码编译但该方法在我对@Html.IsActive观点中不可用。 using Microsoft.AspNet.Mvc.Rendering; namespace Blah.Web.Helpers { public static class HtmlHelpers { public static string IsActive(this HtmlHelper htmlHelper, string controller, string action) { var routeData = htmlHelper.ViewContext.RouteData; var routeAction = routeData.Values[“action”].ToString(); var routeController = routeData.Values[“controller”].ToString(); var returnActive = (controller == routeController && action == routeAction); return returnActive ? “active” : “”; } } } 在视图中我引用了命名空间: […]

是否可以从wwwroot文件夹外部提供静态文件?

我有一个ASP.NET MVC 6项目,具有以下结构: project/ wwwroot/ custom/ project.json 我想要自custom文件,因为它是一个虚拟文件夹到http://localhost/custom而不必在开发过程中复制它们。 是否可以在没有IIS的虚拟文件夹的情况下在vNext中执行此操作(例如,使用StaticFile中间件)?

ASP.NET MVC 6基于HTTP状态代码处理错误

我想为每个状态代码显示不同的错误消息,例如: 400错误请求 403禁止 500内部服务器错误 404未找到 401未经授权 如何在新的ASP.NET MVC 6应用程序中实现这一目标? 我可以使用内置的UseErrorHandler方法执行此操作吗? application.UseErrorHandler(“/error”); 另外,我注意到即使使用上面的处理程序,输入一个不存在的URL,例如/ this-page-does-not-exist,也会导致IIS中出现一个丑陋的404 Not Found错误页面。 怎么还能处理? 在MVC 5中,我们不得不使用ASP.NET的system.web customerrors部分和web.config文件中的system.webServer httpErrors部分,但很难处理笨拙的行为,有很多非常奇怪的行为。 MVC 6能让这更简单吗?

HttpGet属性的路由名称asp.net core 2中基本通用控制器类的名称

我有一个通用控制器,它有几个派生的控制器类。 但我无法弄清楚如何处理HttpGet的路由名称,因为它需要不变。 [HttpGet(“{id}”, Name =”should not hard coded here for derived class”)] public virtual async Task Get(int id) 我需要路由名称,因为在我的HttpPost函数中我想返回需要HttpGet 路由名称的 CreatedAtRoute() 路径名称不能进行硬编码,因为所有派生类都需要具有不同的路由名称。 这是基本控制器 public abstract class BaseController : Controller where TEntity : BaseOptionType, new() where TContext : DbContext { private readonly IGenericRepository _repository; private readonly ILogger<BaseGenericOptionTypesController> _logger; public BaseController(IGenericRepository repository, ILogger<BaseController> logger) { _repository = […]