验证对外部REST服务的请求

时间:2015-01-05 10:23:56

标签: c# asp.net

我对网络开发并不陌生,而且我对网络的主要概念并没有很好的把握。但是,我的任务是编写一个asp.net应用程序,用户可以通过查询外部RESTful Web服务来搜索文档。必须通过HTTP基本身份验证对此REST服务的请求进行身份验证。

到目前为止,我已经能够使用HttpWebRequestHttpWebResponse查询服务,添加编码用户:传递给请求的授权标头,反序列化Json响应并生成一个带有URL的字符串列表到搜索产生的pdf文档。

所以现在我以编程方式将HyperLink个元素添加到页面中并使用这些网址:

foreach (string url in urls) {

    HyperLink link = new HyperLink();
    link.Text = url;
    link.NavigateUrl = url;
    Page.Controls.Add(link);

}

问题是对这些文档的请求必须使用相同的基本http身份验证和相同的用户进行授权:在查询REST服务时传递,并且因为我只是创建用户单击的链接,并且没有创建任何HttpWebRequest个对象,我不知道如何通过用户点击链接来验证此类请求。

非常感谢任何关于如何实现这一目标的指示。提前谢谢!

1 个答案:

答案 0 :(得分:0)

你可能想要在服务器端执行请求,因为我认为你已经在做了,然后显示嵌入在你自己的页面中的结果,或者直接将结果流回给用户。

有点不清楚你需要什么(链接是什么,你向用户展示什么等等),所以这是我能根据你提供的信息做的最佳建议。

<强>更新: 我将创建一个HttpHandler(ASP.NET项目中的.ashx文件),并使用参数链接到该文件,以便您可以向REST服务发出请求并获取正确的文件,然后将数据直接流回访问者。这是一个简单的例子:

public class DocumentHandler : IHttpHandler {

    public Boolean IsReusable {
        get { return true; }
    }

    public void ProcessRequest(HttpContext context) {
        // TODO: Get URL of the document somehow for the REST request
        // context.Request
        // TODO: Make request to REST service

        // Some pseudo-code for you:
        context.Response.ContentType = "application/pdf";

        Byte[] buffer = new WebClient().DownloadData(url);
        context.Response.OutputStream.Write(buffer, 0, buffer.Length);

        context.Response.End();
    }
}

我希望你能自己填补这些空白。