首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将JSON发布到ActionFilterAttribute

将JSON发布到ActionFilterAttribute
EN

Stack Overflow用户
提问于 2021-11-18 06:45:13
回答 1查看 66关注 0票数 0

我正在用C# .Net4.8编写客户端和API。我是来自客户端的POSTing数据,并且在端点方法上有一个ActionFilterAttribute。我想在POSTed方法中读取ActionFilterAttribute数据。我发现我能够使用FormUrlEncodedContent发布表单数据,并且它是被接收的,但是当我尝试使用POSTing JSON数据时,它是不被接收的。

如何更改客户端代码或API代码以正确发布JSON?

POSTing表单数据是这样工作的:

代码语言:javascript
运行
复制
HttpClientHandler handler = new HttpClientHandler()
HttpClient httpClient = new HttpClient(handler);
FormUrlEncodedContent formString = new FormUrlEncodedContent(data);
response = httpClient.PostAsync(url, formString).Result; // run synchronously

然后在API端,填充dataFromClient

代码语言:javascript
运行
复制
public class myFilter : ActionFilterAttribute
{
    public string Feature { get; set; }
    public myFilter(string feature)
    {
        this.Feature = feature;
    }
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        string dataFromClient = (HttpContext.Current.Request.Params["dataFromClient"] == null) ? "" : HttpContext.Current.Request.Params["dataFromClient"];
        // do other stuff with dataFromClient here
    }
}

像这样的POSTing JSON数据不起作用:

代码语言:javascript
运行
复制
HttpClientHandler handler = new HttpClientHandler()
HttpClient httpClient = new HttpClient(handler);
StringContent stringContent = new StringContent(jsonString, System.Text.Encoding.UTF8, "application/json");
response = httpClient.PostAsync(url, stringContent).Result; // run synchronously

使用此方法,API中的dataFromClient为空。

EN

回答 1

Stack Overflow用户

发布于 2021-11-18 15:54:36

由于您正在发布application/json,所以您应该阅读请求正文。我想,这是你想要的;

代码语言:javascript
运行
复制
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    var request = filterContext.HttpContext.Request;
    var initialBody = request.Body;
    
    try
    {
        request.EnableRewind();

        using (StreamReader reader = new StreamReader(request.Body))
        {
            string dataFromClient = reader.ReadToEnd();

            // do other stuff with dataFromClient here

            return dataFromClient;
        }
    }
    finally
    {
        request.Body = initialBody; 
    }

    filterContext.Request.Body.Position = 0

    return string.Empty;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70015542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档