2013-12-12 2 views
4

Я не могу отправить запрос, чтобы сообщить серверу, используя HttpClient как результат всегда 401 (Несанкционированное).Использование HttpClient внутри ASP.NET MVC действий для вызова SSRS

Действие

public async Task<FileStreamResult> SSRSTest() 
      { 

       //set credentials 
       using (var handler = new HttpClientHandler { 
        Credentials = new NetworkCredential("userName", "password"), 
        UseDefaultCredentials = false 
       }) 

       using (var httpClient = new HttpClient(handler)) 
       { 
        //get *.pdf from report server 
        var response = await httpClient      .GetStreamAsync("http://someip/ReportServer/Pages/ReportViewer.aspx?TheRemainingPartOfURL"); 


        var contentDisposition = new ContentDisposition 
        { 
         FileName = "SomeReport.pdf", 
         Inline = false 
        }; 

        //set content disposition 
        Response.AppendHeader("Content-Disposition", contentDisposition.ToString()); 

        //return the file 
        return File(response, "application/pdf"); 
       } 
      } 

Дополнительно:

Pass a Report Parameter Within a URL

Export a Report Using URL Access

Export Formats

Generate Data Feeds from a Report

+1

У пользователя есть доступ к услугам в отчетности? – scheien

+0

@scheien Да, когда я вставляю URL-адрес в адресную строку браузера, или если я использую ссылку как href, она работает. –

+0

Не должно быть доменное имя в качестве третьего параметра вашего конструктора NetworkCredential? – jbl

ответ

1

Я использовал Fiddler, чтобы увидеть, что происходит, когда я войти, используя браузер

enter image description here

Вкладка Auth является

WWW-Authenticate Header is present: Negotiate  
WWW-Authenticate Header is present: NTLM 

так, хотя мне сказали, что для проверки подлинности Basic I необходимо использовать следующее:

CredentialCache credentialCache = new CredentialCache(); 
      credentialCache.Add(new Uri("http://youruri"),"NTLM",new NetworkCredential(username, password)); 

      using (var handler = new HttpClientHandler 
      { 
       Credentials = credentialCache 
      }) 

Остальная часть кода для HttpClient - это то же самое.

Дополнительно:

Authentication with the Report Server

Selecting a Credential Type

Understanding SQL Server Reporting Services Authentication

Configure Basic Authentication on the Report Server

Смежные вопросы