【问题标题】:Replace Page.Request in ASP.NET Core 2替换 ASP.NET Core 2 中的 Page.Request
【发布时间】:2019-03-21 07:56:05
【问题描述】:

我正在将项目从 Net 4.6.2 迁移到 Net Core 2。 MVC Net Core 2 中 Request 的替代品是什么?如何替换下面的这一行? string rawId = Request["ProductID"];

在 Net Core 2 中,我收到了

错误:

Cannot apply indexing with [] to an expression of type 'HttpRequest'    HPE.Kruta.Web.Core

https://docs.microsoft.com/en-us/dotnet/api/system.web.httprequest?view=netframework-4.7.2

代码示例:

protected void Page_Load(object sender, EventArgs e)  
{  
    string rawId = Request["ProductID"];  
    int productId;  
    if (!String.IsNullOrEmpty(rawId) && int.TryParse(rawId, out productId))  
    {  
        using (ShoppingCartActions usersShoppingCart = new ShoppingCar

【问题讨论】:

  • 你试过'string page = HttpContext.Request.Query["page"]'吗?

标签: c# asp.net-core


【解决方案1】:

ASP.NET WebForms 不能直接转换为 ASP.NET MVC 和 ASP.NET Core,因为“Web 表单”范式不能很好地转换为 ASP.NET MVC 中使用的控制器+动作+模型+绑定系统。我建议您先阅读这些其他 QA:

旧的 HttpRequest 对象将 QueryStringForm 值组合在一起,但这是一个糟糕的设计,现在您需要明确检查其中一个(或两者),以便您确切知道值的来源来自。

但是,如果您有一个查询字符串值,则应该将其设为控制器操作参数,而不是使用 Request 对象。您可以使用强类型值(例如 Int32 而不是 String,因此您无需自己执行验证和转换。像这样:

public async Task<IActionResult> GetShoppingCart( [FromQuery] Int32 productId )
{
    ShoppingCart cart = await this.db.GetShoppingCartAsync( productId );

    ShoppingCartViewModel vm = new ShoppingCartViewModel()
    {
        Cart = cart
    };

    return this.View( model: vm );
}

但是,如果您仍然希望访问原始查询字符串或发布的表单值作为其原始字符串值,那么就这样做。

请注意,FormQuery 不再是 NameValueCollection 对象,而是更正确地公开“单键多值”数据的强类型类。所以这样做是为了像以前一样获得"ProductId" 值:

String rawId = this.Request.Form["ProductId"].FirstOrDefault() ?? this.Request.Query["ProductId"].FirstOrDefault();

因为每个Form 条目都是StringValues 而不是String,所以您需要始终使用FirstOrDefault() 来获取单个字符串值(不要使用SingleOrDefault(),因为如果2 个或更多,它将引发异常值存在于相同的键)。其次,?? 运算符将使程序首先检查查询字符串,如果已发布的 Form 值中不存在命名值。

FormQuery 集合返回 StringValues.Empty 而不是 null 如果在任一集合中都找不到指定的键,因此如果使用 FirstOrDefault() 扩展方法,您不会冒NullReferenceException 的风险字典中不存在该键。

【讨论】:

    猜你喜欢
    • 2017-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-04
    • 1970-01-01
    • 1970-01-01
    • 2018-10-24
    相关资源
    最近更新 更多