当前位置: 首页 > 知识库问答 >
问题:

有没有办法在Web Api控制器中处理表单post数据?

岳刚洁
2023-03-14

ASP。NET MVC,可以访问表单post数据:

var thisData = Request.Form["this.data"];

是否有可能在一个Web APIApiController中实现相同的功能?

共有3个答案

何乐
2023-03-14

作为Aliostad方法的替代方法,可以:

public void Post(HttpRequestMessage request)
{
    NameValueCollection formData = await request.Content.ReadAsFormDataAsync();
}
贾实
2023-03-14

这是不可能的,因为HttpRequestMessage不提供那种开箱即用的收集。

但是,如果您的应用程序托管在ASP. NET下,您可以访问当前的HttpContext对象并从那里获取表单值:

public class CarsController : ApiController {

    public string[] Get() {

        var httpContext = (HttpContextWrapper)Request.Properties["MS_HttpContext"];
        var foo = httpContext.Request.Form["Foo"];

        return new string[] { 
            "Car 1",
            "Car 2",
            "Car 3"
        };
    }
}

但我不确定这是否是做这类事情的最佳方式。

鞠子轩
2023-03-14

ASP. NET Web API在处理不同的HTTP方案(尤其是流)时变得更加健壮。因此,只有媒体类型的格式化程序通常会触及内容,并必须使内容连贯一致。

在ASP。NET MVC,application/x-www-form-urlencoded内容类型是一级公民(尤其是因为这是95%的POST请求的内容类型),我们有formscolection在access中提供字典访问,只要它被定义为输入参数。

在ASP。NET Web API,application/x-www-form-urlencoded是另一种内容类型,应该由其MediaTypeFormatter读取。因此,ASP。NET Web API不能对表单做出任何假设。

ASP中的常规方法。NETWebAPI将表单表示为模型,以便媒体类型格式化程序将其反序列化。另一种方法是将操作的参数定义为NameValueCollection

public void Post(NameValueCollection formData)
{
   var value = formData["key"];
}
 类似资料:
  • 我有Spring acpect,它会在我的应用程序中的每个控制器方法周围触发。在方面的主体中,我想访问方法签名中声明的所有请求参数。有没有一种简单的方法可以避免反思?

  • 长话短说,我有一个cron工作,每天在指定的时间将一堆文件上传到云存储桶中。所有这些bucket都有一个关联的发布/订阅通知主题,该主题在文件创建事件时触发。每个事件都会触发一个数据流作业来处理该文件。 问题是这会在几秒钟内实例化100个并行批处理作业。每个作业都会使用HTTP请求来关闭我的下游服务。这些服务无法足够快地扩展,并开始抛出连接拒绝错误。 为了限制这些请求,我限制了每个数据流作业的可用

  • 我知道如何清除缓存以供查看: ,但我还需要其他东西-删除controller方法中应用程序的所有缓存。怎么做?

  • 我有一个spring-boot应用程序,没有任何控制器类。如何为该应用程序编写异常处理程序。用@ControllerAdvice注释的异常处理程序类不起作用。

  • 问题内容: 我正在尝试调试继承的程序。该程序包含字符串,数组列表和集合,类型之间的大量转换,并且我需要执行一些字符串操作(等)。 数据打印到控制台时 看起来 像字符串(例如,一行文本,如或),但是我的代码因各种错误而出错,这表明我强制转换为String的代码无法正常工作。 我想尝试弄清楚传入的数据类型,并留下我的方法来验证程序是否按预期运行。有什么办法可以找到Java中的字段类型?在一个理想的世界

  • 我希望我的Xamarin表单应用程序禁用屏幕截图。有办法这样做吗?注意:我在纯Android和iOS版本中找到了解决方案,但我需要Xamarin解决方案。如果有一种方法可以以某种方式嵌入纯Android和iOS解决方案,我也接受这一点。谢谢:)