net webapi controller 怎么获取post body里面的数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了net webapi controller 怎么获取post body里面的数据相关的知识,希望对你有一定的参考价值。

参考技术A 1.服务器认证(Server Authentication)
HttpClient处理服务器认证几乎是透明的,仅需要开发人员提供登录信息(login credentials)。登录信息保存在HttpState类的实例中,可以通过 setCredentials(String realm, Credentials cred)和getCredentials(String realm)来获取或设置。
HttpClient内建的自动认证,可以通过HttpMethod类的setDoAuthentication(boolean doAuthentication)方法关闭,而且这次关闭只影响HttpMethod当前的实例。

2.代理认证(proxy authentication)
除了登录信息需单独存放以外,代理认证与服务器认证几乎一致。用 setProxyCredentials(String realm, Credentials cred)和 getProxyCredentials(String realm)设、取登录信息。

3.认证方案(authentication schemes)
是HTTP中规定最早的也是最兼容的方案,遗憾的是也是最不安全的一个方案,因为它以明码传送用户名和密码。它要求一个UsernamePasswordCredentials实例,可以指定服务器端的访问空间或采用默认的登录信息。

ASP.Net Core WebAPI - 请求的资源上不存在“Access-Control-Allow-Origin”标头

【中文标题】ASP.Net Core WebAPI - 请求的资源上不存在“Access-Control-Allow-Origin”标头【英文标题】:ASP.Net Core WebAPI - No 'Access-Control-Allow-Origin' header is present on the requested resource 【发布时间】:2017-09-28 00:29:32 【问题描述】:

我在使用 IAsyncResourceFilter 实现时遇到了 CORS 问题。 我也希望能够从其他域调用我的操作...

我在 Startup 文件下定义了 CORS 策略,如下所示:

services.AddCors(options =>

    options.AddPolicy("AllowAllOrigins",
    builder =>
    
        builder.AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin();
    );
);

Configure方法下:

app.UseCors("AllowAllOrigins");

不使用使用 IAsyncResourceFilterTypeFilterAttribute 也可以正常工作。

例如在没有任何TypeFilterAttribute 属性的情况下调用我的 API 操作:

public bool Get()

    return true;

但是当按如下方式添加我的TypeFilterAttribute 时,它不起作用并返回有关 CORS 的错误:

[MyTypeFilterAttribute("test")]
public bool Get()

    return true;

我缺少什么吗?使用IAsyncResourceFilter时应该添加什么?

以下是MyTypeFilterAttribute的代码:(没有真正的逻辑……)

public class MyTypeFilterAttribute : TypeFilterAttribute

    public MyTypeFilterAttribute(params string[] name) : base(typeof(MyTypeFilterAttributeImpl))
    
        Arguments = new[]  new MyTypeRequirement(name) ;
    

    private class MyTypeFilterAttributeImpl: Attribute, IAsyncResourceFilter
    
        private readonly MyTypeRequirement_myTypeRequirement;

        public MyTypeFilterAttributeImpl(MyTypeRequirement myTypeRequirement)
        
            _myTypeRequirement= myTypeRequirement;
        

        public async Task OnResourceExecutionAsync(ResourceExecutingContext context, ResourceExecutionDelegate next)
        
            context.Result = new OkResult();

            await next();
        
    


public class MyTypeRequirement : IAuthorizationRequirement

    public string Name  get; 

    public MyTypeRequirement(string name)
    
        Name = name;
    

【问题讨论】:

Ehm...发布类型过滤器的内容怎么样? 添加了代码。谢谢 在方法中添加[EnableCors("AllowAllOrigins")] 属性是否有效? 这个context.Result = new OkResult(); 不只是清除任何标题集吗? @Mardoxx 那应该是only set the status code。 【参考方案1】:

Cors 中间件在响应结果对象上设置标头。

我相信你正在使用context.Result = new OkResult(); 重置这些

请参阅下面 poke 的回复。如果您在操作过滤器中设置任何结果,该结果会立即被发回,从而覆盖任何其他结果!

【讨论】:

找到了!确实有一些逻辑in the pipeline 使管道提前停止。请注意,这会检查Result != null,因此您不能将任何内容分配给Result,而Result 最初将是null,因此您也不能在其中分配任何内容。这意味着如果您希望管道继续运行,您不能影响结果。 啊,我们走了!谢谢:)

以上是关于net webapi controller 怎么获取post body里面的数据的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml)

为什么 ASP.NET Core WebAPI 继承 ControllerBase 而不是 Controller ?

CORS asp.net 核心 webapi - 缺少 Access-Control-Allow-Origin 标头

.net webapi跨域 web.config配置

自动给 Asp.Net Core WebApi 增加 ApiVersionNeutral

[Asp.Net WebApi]WebApi入门