为啥此代码给我来自 Request.Form 的无效内容类型? (ASP.NET 核心)
Posted
技术标签:
【中文标题】为啥此代码给我来自 Request.Form 的无效内容类型? (ASP.NET 核心)【英文标题】:Why is this code giving me invalid content type from Request.Form? (ASP.NET Core)为什么此代码给我来自 Request.Form 的无效内容类型? (ASP.NET 核心) 【发布时间】:2018-02-05 06:18:53 【问题描述】:这是使用 RazorPages 的 ASP.NET Core 2.0 OnGet 方法。
cs 文件:
using System;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace CoreRazor2.Pages
public class IndexModel : PageModel
[BindProperty]
public int result get; set;
public void OnGet(string operationType)
string result;
switch (operationType)
case "+":
result = Request.Form["First"];
break;
case "-":
result = "1";
break;
case "/":
result = "2";
break;
case "*":
result = "3";
break;
cshtml文件:
@page
@model IndexModel
@
ViewData["Title"] = "Calculator";
<form method="GET">
<label>First Value: </label>
<input name="First"/>
<br/>
<br/>
<label>Second Value: </label>
<input name="second"/>
<br/>
<br/>
<input type="submit" name="operationType" value="+"/>
<input type="submit" name="operationType" value="-"/>
<input type="submit" name="operationType" value="*"/>
<input type="submit" name="operationType" value="/"/>
</form>
@Model.result
当在第一个表单输入中输入一个值并单击“+”提交按钮时,程序在Request.Form[“First”]处抛出以下异常:
Exception has occurred: CLR/System.InvalidOperationException
An exception of type 'System.InvalidOperationException' occurred in Microsoft.AspNetCore.Http.dll but was not handled in user code: 'Incorrect Content-Type: '
at Microsoft.AspNetCore.Http.Features.FormFeature.ReadForm()
at Microsoft.AspNetCore.Http.Internal.DefaultHttpRequest.get_Form()
at CoreRazor2.Pages.IndexModel.OnGet(String operationType) in c:\Users\Administrator\Desktop\CoreRazor2\Pages\Index.cshtml.cs:line 17
at Microsoft.AspNetCore.Mvc.RazorPages.Internal.ExecutorFactory.VoidHandlerMethod.Execute(Object receiver, Object[] arguments)
at Microsoft.AspNetCore.Mvc.RazorPages.Internal.PageActionInvoker.<InvokeHandlerMethodAsync>d__29.MoveNext()
有没有人知道为什么或可以向我指出一些有用的文档?
【问题讨论】:
【参考方案1】:当您需要处理所有类型的 HttpRequest 时,出于通用目的(如日志记录),请使用 HttpRequest.HasFormContentType
示例代码:
if (request.HasFormContentType && request.Form != null && request.Form.Count() > 0)
dynamic form = new ;
foreach (var f in request.Form)
form[f.Key] = f.Value;
d.form = form;
【讨论】:
你救了我的一天,谢谢【参考方案2】:基于 GET 的表单通过 URL 而不是表单传递值。您需要使用Request.Query["First"]
。 Request.Form 仅在您发布表单时有效。但由于您使用的是 Razor Pages,因此您可以省去所有麻烦,只需使用模型绑定:
using System;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace CoreRazor2.Pages
public class IndexModel : PageModel
public int Result get; set;
public void OnGet(string operationType, int first, int second)
switch (operationType)
case "+":
Result = first + second;
break;
case "-":
Result = first - second;
break;
case "/":
Result = first / second;
break;
case "*":
Result = first * second;
break;
【讨论】:
如果我们需要接收POST数据怎么办? 然后添加一个 OnPost 方法。【参考方案3】:我觉得应该是
Request.Query["First"]
而不是
Request.QueryString["First"]
否则我会得到
无法将带有 [] 的索引应用于“QueryString”类型的表达式
【讨论】:
以上是关于为啥此代码给我来自 Request.Form 的无效内容类型? (ASP.NET 核心)的主要内容,如果未能解决你的问题,请参考以下文章
我用ckEditor+ckFinder上传图片,保存时为啥报错从客户端中检测到有潜在危险的Request.Form值,
无法使用来自axios请求的request.form在flask api中获取请求正文[重复]