C# 从HttpActionContext获取内容类型
我正在尝试根据body请求中传递的值对端点进行授权。例如,在请求主体中传递siteID&我希望根据用户是否具有该站点的适当权限进行授权 如果主体请求以json的形式传递,但如果它是urlencoded的形式,我就可以工作。我不知道如何事先找到答案。下面是我的一段代码,它可以处理json数据,但如果主体请求是URL编码的,则会失败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) {
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”);
谢谢!