我想在我的控制器上获取我的主机地址,类型为 POST。请检查下面的控制器示例。请注意我使用的是asp.net core 2.1
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult PasswordReset(ResetPassword data)
{
string myurl = //how can i store http host address on this variable?
return View()
}
Run Code Online (Sandbox Code Playgroud) 使用.net核心2.1
根据Microsoft 文档,IFormFile应该用于处理较小的上传文件,而MultipartReader应该用于较大的文件.很公平.
不过,他们也说
在处理之前,使用IFormFile技术上载的文件将缓冲在内存中或Web服务器的磁盘上.在action方法中,IFormFile内容可以作为流访问.
因此,如果将大文件发送到磁盘并使用流读取,为什么我们总是不能使用IFormFile?我不明白为什么MultipartReader如果较大的文件还没有完全加载到RAM中.
任何人都可以解释我在这里缺少的东西吗?
将项目更新为“ Microsoft.AspNetCore.All” 2.2.0之后,在IIS中运行时出现错误,但在Visual Studio中运行时却没有错误。
HTTP-Fehler 500.21 - Internal Server Error
Der Handler "aspNetCore" weist das ungültige Modul "AspNetCoreModuleV2" in der Modulliste auf.
我不知道是什么原因造成的,而www似乎没有答案。也许有人面对同样的事情并且有解决方案
我有一个使用razor进行服务器端渲染的页面,您可以在其中添加来自不同列表的几个元素,填写一些字段并在提交时从中创建请求.
每次从任何列表添加/获取项目时,我都会将具有提交按钮的帖子发送到特定操作,例如"CustomerSelected".我这样做,因为我需要为添加的项重新创建其他视图组件.在这些方法中,我想将添加的对象添加到db上下文中,因此在提交时我可以说SaveChanges(),而不必在同一方法中组装所有内容.但在.net核心数据库上下文是每个请求,建议保持这种方式.在这种情况下,我如何在请求之间存储这些临时实体对象,以后如果有人决定提交它们,我可以说SaveChanges()或丢弃它们?
我想要这样的东西:
public IActionResult CustomerAdded(int customerId)
{
var customer = _context.Customers.First(c => c.IdCustomer == customerId);
var message = _context.Messages.First(m => m.IdMessage = _idMessage);
message.Customers.Add(customer);
return View();
}
public IActionResult ItemAdded(int itemId)
{
var item = _context.Items.First(c => c.IdItem == itemId);
var message = _context.Messages.First(m => m.IdMessage = _idMessage);
message.Items.Add(item);
return View();
}
public IActionResult Submit()
{
_context.SaveChanges();
return View();
}
Run Code Online (Sandbox Code Playgroud)
如果这是不可能的,那么我正在考虑在每个方法中添加单个元素并将它们保存在那里并在提交时我将构建最后的最终元素.但如果有人在没有提交的情况下关闭浏览器,那么我的数据库中存在不完整的数据.我必须运行某种工作来删除它们,这对于这么简单的任务来说似乎太过分了.
c# dbcontext entity-framework-core asp.net-core-mvc asp.net-core
我有一种情况,我希望在结果成功时重定向/显示某个url/action但是如果有错误则返回查看.
例如,当someWork返回true时,我想用一些数据显示"成功页面",但是当它为false时,我将返回页面并显示错误.
通常ChildAction可以做到,但在.Net Core中,它们似乎缺失了.
实现这一目标的最佳方法是什么?我主要担心的是,如果有人在浏览器栏中将其写入,则不应直接访问"成功"路线/操作.
public IActionResult DoSomething()
{
bool success = someWork();
if (success)
{
// goto some action but not allow that action to be called directly
}
else
{
return View();
}
}
Run Code Online (Sandbox Code Playgroud) 在asp.net上完全没有知识,请尝试在这里自学ASP.NET Core 2.0 MVC。
我目前所坚持的是:
尝试找到用于图像上传的教程,以将图像放置到根目录的子目录中,例如/ images / items,然后将该路径保存到数据库中,以便在列出项目时也可以将图像img src。
到目前为止,这是我所做的:
ItemsController:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("Id,SupplierId,CategoryId,Name,Description,Image,Price,Enabled,DateAdded")] Item item)
{
if (ModelState.IsValid)
{
// add image upload
// end image upload
_context.Add(item);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(item);
}
Run Code Online (Sandbox Code Playgroud)
我的ItemModel类是:
public class Item
{
public int Id { get; set; }
public int SupplierId { get; set; }
public int CategoryId { get; set; }
public string Name { get; set; }
public string Description { …Run Code Online (Sandbox Code Playgroud) 我正在 ASP.NET Core MVC (2.1) 中的输入字段上进行自定义验证。我想添加一个简单的验证码字段,要求用户输入一些可以在 appsettings.json 文件中轻松重新配置的数字。我知道有很多图书馆都在做验证码,但这不是我想要的这种特殊情况。
我无法从 appsettings.json 获取值。下面的代码可以完美编译,但我不知道如何从 CaptchaCustomAttribute 类中的 appsettings.json 文件中获取值。
这是我的代码:
// appsettings.json
{
"GeneralConfiguration": {
"Captcha": "123456"
}
}
// GeneralConfiguration.cs
public class GeneralConfiguration
{
public string Captcha { get; set; }
}
// startup.cs / dependency injection
public void ConfigureServices(IServiceCollection services)
{
services.Configure<GeneralConfiguration>(Configuration.GetSection("GeneralConfiguration"));
}
// form model
public class ContactFormModel {
... simplified
[Display(Name = "Captcha")]
[Required(ErrorMessage = "Required")]
[CaptchaCustom]
public string Captcha { get; set; }
}
// CaptchaCustomAttribute.cs
public sealed class …Run Code Online (Sandbox Code Playgroud) 昨天,我花了大量时间搜索并解决此问题,但没有提出解决方案。这是我用作参考的指南。
问题在于表单中的数据未到达我的控制器。我的目标是获取表格数据并将其传递给控制器/模型,以便我可以在整个代码中使用这些值并将其存储在数据库中。以下是我到目前为止所拥有的...
在我的Browse.cshtml中(查看)
@model Collect
<form asp-action="Collect" asp-controller="Collect" method="post">
<input type="hidden" asp-for="GameId" name="@game.id"/>
<button type="submit" class="dropdown-item btn btn-block">Default</button>
</form>
Run Code Online (Sandbox Code Playgroud)
在我的CollectController.cs(控制器)中
using System;
using GameLibrary.me.Models;
using Microsoft.AspNetCore.Mvc;
namespace GameLibrary.me.Controllers
{
public class CollectController : Controller
{
[HttpGet]
public IActionResult Collect()
{
return View();
}
[HttpPost, ValidateAntiForgeryToken]
public IActionResult Collect(Collect model)
{
Console.WriteLine("**********\n"+model.GameId+"\n**********");
return Content($"Hello {model.GameId}");
}
}
}
Run Code Online (Sandbox Code Playgroud)
在我的Collect.cs(模型)中
namespace GameLibrary.me.Models
{
public class Collect
{
public int GameId { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:这是我的IDE告诉我的...
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
Request starting …Run Code Online (Sandbox Code Playgroud) 报告定义无效。详细信息:报告定义具有无效的目标命名空间“ http://schemas.microsoft.com/sqlserver/reporting/2016/01/reportdefinition ”,无法升级。
我正在使用 ASP.NET MVC 框架。setparameter()当我调用将数据设置到 rdlc 设计报告中时出现错误。
viewer.LocalReport.DataSources.Add(new ReportDataSource("SaleDataSet", modelList));这行代码执行成功,并打印了报告。
但在下面一行,
viewer.LocalReport.SetParameters(parms);
错误出现了。
本地报告处理期间出现错误。报告定义的目标命名空间无效。
public ActionResult PrintSaleReport(string saleId)
{
try
{
Decimal sId = 0;
if (!string.IsNullOrEmpty(saleId))
{
sId = Convert.ToDecimal(saleId);
}
var saleList = new SaleRepository().GetById(sId);
List<SalesModel> modelList = new List<SalesModel>();
foreach (var item in saleList.SaleHistories)
{
SalesModel obj = new SalesModel();
obj.StockName = item.Stock.Name;
obj.saleQuantity = item.Quantity + "";
obj.SaleHistoryPrice = Math.Round(Convert.ToDecimal(item.SalePrice), 2) + "";
obj.Expr = Convert.ToDecimal(obj.saleQuantity) * Convert.ToDecimal(obj.SaleHistoryPrice) + "";
modelList.Add(obj); …Run Code Online (Sandbox Code Playgroud) 我想编写一个自定义过滤器,它将检查用户是否登录到我的网站,如果没有,则将他们重定向回登录页面。
我希望过滤器在加载时自动应用于页面。
我已经尝试了下面所示的解决方案,但过滤器目前不起作用。
过滤器代码:
using Microsoft.AspNetCore.Mvc.Filters;
namespace MODS.Filters
{
public class AuthorisationPageFilter : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext context)
{
System.Diagnostics.Debug.Write("Filter Executed"); //write to debugger to test if working
//add real code here
base.OnActionExecuted(context);
}
}
}
Run Code Online (Sandbox Code Playgroud)
接下来,这是应用于页面模型的过滤器属性:
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using MODS.Filters;
namespace MODS.Pages.Menus
{
[AuthorisationPageFilter]
public class Admin_MainMenuModel : PageModel
{
public ActionResult Admin_MainMenu()
{
System.Diagnostics.Debug.Write("Function Executed");
return new ViewResult();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的印象是,您需要在页面上调用一个操作/方法,以便在页面加载时应用该函数(请告诉我这是否正确),所以这里是调用Admin_MainMenu.cshtml 页面文件中的方法的代码(在剃刀页面顶部的代码块中):
Model.Admin_MainMenu();
Run Code Online (Sandbox Code Playgroud)
我目前的想法是: 1. 过滤器本身的类型错误(可能是IPageFilter?) 2. 我实现它的方式是错误的(无论是我将其应用于页面模型,还是当我调用页面上的方法)。
任何帮助是极大的赞赏。谢谢。
c# ×8
asp.net-core ×7
asp.net ×2
asp.net-mvc ×2
razor ×2
.net-core ×1
dbcontext ×1
filter ×1
razor-pages ×1