2012-11-02 123 views
1

我正在使用具有表单授权的Asp.net WebApi。我成功地创建了对控制器的POST请求,该请求通过使用HttpClient的[Authorize]属性进行保护,该控制器首先访问授权控制器,该控制器存储cookie并将客户端用于其他请求。对于GET请求,我想使用Linq2Rest库,它使用JsonRestClient,但我不知道如何将它用于授权。我很惊讶,我找不到有关该主题的任何问题或讨论。修改这个库的来源是解决这个问题的唯一方法吗?Linq2Rest身份验证Asp.net WebApi

更新: 我只使用通常的形式authorizasion。 这是GET方法的样子

[Authorize] 
    [Queryable] 
    public IQueryable<Invoice> GetInvoices() 
    { 
     return repository.GetInvoices(); 
    } 
+0

将[Authorize]属性添加到控制器的GET方法时会发生什么? IModelFilter是否在授权前抓取请求?请提供一些代码以显示您已经定义了GET方法。 –

+0

@KevinJunghans添加了更新 – Lanayx

回答

1

我创建自己的RESTClient实现来解决这个问题,不知道是否是最佳的解决方案,但是这似乎为我工作。这里currentHttpClient是已经有认证cookie的对象。

internal class PinJsonRestClient : JsonRestClient, IRestClient 
{ 

    private readonly HttpClient currentHttpClient; 

    public PinJsonRestClient(Uri uri) : base(uri) 
    { 
    } 

    public PinJsonRestClient(Uri uri, HttpClient currentHttpClient) : base(uri) 
    { 
     this.currentHttpClient = currentHttpClient; 
    } 

    public new Stream Get(Uri uri) 
    { 
     var result = currentHttpClient.GetStreamAsync(uri).Result; 
     return result; 
    } 
}