C# 从HttpActionContext获取内容类型

C# 从HttpActionContext获取内容类型,c#,json,authorization,httprequest,x-www-form-urlencoded,C#,Json,Authorization,Httprequest,X Www Form Urlencoded,我正在尝试根据body请求中传递的值对端点进行授权。例如,在请求主体中传递siteID&我希望根据用户是否具有该站点的适当权限进行授权 如果主体请求以json的形式传递,但如果它是urlencoded的形式,我就可以工作。我不知道如何事先找到答案。下面是我的一段代码,它可以处理json数据,但如果主体请求是URL编码的,则会失败 public override void OnAuthorization(HttpActionContext actionContext) {

我正在尝试根据body请求中传递的值对端点进行授权。例如,在请求主体中传递siteID&我希望根据用户是否具有该站点的适当权限进行授权

如果主体请求以json的形式传递,但如果它是urlencoded的形式,我就可以工作。我不知道如何事先找到答案。下面是我的一段代码,它可以处理json数据,但如果主体请求是URL编码的,则会失败

 public override void OnAuthorization(HttpActionContext actionContext)
    {
        var request = actionContext.Request;

                try
                {
                    var content = actionContext.Request.Content.ReadAsStringAsync().Result;
                    var jsonResult = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(content);
                    _siteId = jsonResult["siteID"].ToString();
                    actionContext.Response = UserWorker.UserValidation(_siteId, request) as HttpResponseMessage;
                }
                catch (Exception e)
                {
                    actionContext.Response = request.CreateResponse(HttpStatusCode.BadRequest, e.Message);
                }
public override void OnAuthorization(HttpActionContext-actionContext)
{
var-request=actionContext.request;
尝试
{
var content=actionContext.Request.content.ReadAsStringAsync().Result;
var jsonResult=Newtonsoft.Json.JsonConvert.DeserializeObject(内容);
_siteId=jsonResult[“siteId”].ToString();
actionContext.Response=UserWorker.UserValidation(_siteId,request)作为HttpResponseMessage;
}
捕获(例外e)
{
actionContext.Response=request.CreateResponse(HttpStatusCode.BadRequest,e.Message);
}

您可以从请求对象获取内容类型。请尝试以下操作:

 public override void OnAuthorization(HttpActionContext actionContext)
    {
        var request = actionContext.Request;

        try
        {
            var content = actionContext.Request.Content.ReadAsStringAsync().Result;
            var contentType = request.Content.Headers.ContentType;
            string _siteId = string.Empty;
            if (contentType.MediaType == "application/json") //JSON case:
            {
                dynamic jsonResult = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(content);
                _siteId = jsonResult["siteID"].ToString();
            }
            else // form urlencode case:
            {
                _siteId = content.Split('=')[0] == "siteID" ? content.Split('=')[1] : string.Empty;

            }

            actionContext.Response = UserWorker.UserValidation(_siteId, request) as HttpResponseMessage;
        }
        catch (Exception e)
        {
            actionContext.Response = request.CreateResponse(HttpStatusCode.BadRequest, e.Message);
        }

    }
public override void OnAuthorization(HttpActionContext-actionContext)
{
var-request=actionContext.request;
尝试
{
var content=actionContext.Request.content.ReadAsStringAsync().Result;
var contentType=request.Content.Headers.contentType;
string _siteId=string.Empty;
if(contentType.MediaType==“application/json”)//json大小写:
{
动态jsonResult=Newtonsoft.Json.JsonConvert.DeserializeObject(内容);
_siteId=jsonResult[“siteId”].ToString();
}
else//form urlencode大小写:
{
_siteId=content.Split('=')[0]==“siteId”?content.Split('=')[1]:string.Empty;
}
actionContext.Response=UserWorker.UserValidation(_siteId,request)作为HttpResponseMessage;
}
捕获(例外e)
{
actionContext.Response=request.CreateResponse(HttpStatusCode.BadRequest,e.Message);
}
}

除了content.Split部分之外,这一切都很好。我将该行更改为
\u siteId=HttpUtility.ParseQueryString(content.Get(“siteId”);
谢谢!