C# Compact框架中的HttpResponseMessage内容属性

C# Compact框架中的HttpResponseMessage内容属性,c#,asp.net-mvc,asp.net-web-api,compact-framework,C#,Asp.net Mvc,Asp.net Web Api,Compact Framework,我正在构建一个.NET4.5MVC4WebAPI,它将公开我希望安全访问的控制器方法。我创建了一个Action Filter属性,用于检查正确编码的RSA令牌,如下所示,为了简洁起见,将其删除: public class TokenValidationAttribute : ActionFilterAttribute { public override void OnActionExecuting(HttpActionContext actionContext) {

我正在构建一个.NET4.5MVC4WebAPI,它将公开我希望安全访问的控制器方法。我创建了一个Action Filter属性,用于检查正确编码的RSA令牌,如下所示,为了简洁起见,将其删除:

    public class TokenValidationAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        try
        {
            //authorize user
        }
        catch (Exception)
        {                
            actionContext.Response = new HttpResponseMessage(HttpStatusCode.Forbidden)
            {
                Content = new StringContent("Unauthorized User")
            };                
        }
    }
}
然后在我的.NET 3.5 CF应用程序中,我将执行以下操作:

public static List<string> GetAvailableProjectIds()
        {
        var idList = new List<string>();
        var url = "the url";
        var req = CreateRequest(url, true);

        try
        {
            using (var response = (HttpWebResponse)req.GetResponse())
            {
                //do something with the resonse
            }
        }
        catch (Exception ex)
        {

        }

        return idList;
    }
publicstaticlist GetAvailableProjectIds()
{
var idList=新列表();
var url=“url”;
var req=CreateRequest(url,true);
尝试
{
使用(var response=(HttpWebResponse)req.GetResponse()
{
//用理性做点什么
}
}
捕获(例外情况除外)
{
}
返回懒汉;
}
捕获的异常是WebException,包含正确的403禁止状态代码。但没有比这更有用的了


是否有方法获取Content属性,以便我可以向最终用户显示他们试图与“未经授权的用户”进行身份验证?

我从来都不喜欢这种行为,在通信正常时它会使用异常。尝试添加此扩展方法:

private static HttpResponse GetAnyResponse(this HttpRequest req)
{
   HttpResponse retVal = null;

   try
   {
      retVal = (HttpWebResponse)req.GetResponse()
   }
   catch (WebException webEx)
   {
      retVal = webEx.Response;
   }
   catch (Exception ex)
   {
      // these are the "bad" exceptions, let them pass
      throw;
   }

   return webEx;   
}
然后将代码更改为:

using (var response = (HttpWebResponse)req.GetAnyResponse())
{
    //do something with the resonse
}

你的意思是没有包含“未授权用户”内容的主体?还有,为什么不在这个场景中发回“未经授权”的状态代码呢?不,在调试模式下查看WebException时,我在任何地方都看不到“未经授权的用户”。使用“未经授权”状态代码的要点。这比“禁止”更有意义。然而,在很多情况下,状态代码的信息量是不够的。也许你正在查询一个Web服务,它告诉你你最喜欢的运动队今晚什么时候比赛。难道你不想收到一条信息,上面写着“对不起,你的球队今晚不能比赛”,而不是“找不到”的回应吗?“NotFound”一词可以理解这一点,但却不那么友好。当然,有一条消息绝对有用……可以肯定的是,你可以通过Fiddler检查服务返回的是什么样的响应,以消除服务的任何问题服务肯定会返回消息。例如,如果我尝试导航到,我将在浏览器窗口中看到“请求必须通过HTTPS进行”的响应。只是不知道如何在CF应用程序捕获的WebException中找到它。很明显,一旦你有了响应对象,你就可以访问标题、正文等。。。