web-dev-qa-db-ja.com

WebRequest.GetResponse()がエラー401をスローしています:無許可

以前にアクセスしたローカルのaspxページをhtmlに出力しようとしているASP.NETアプリケーションがあります(そのレポートであり、静的なhtmlコピーをアーカイブとして保存したい)。ローカルページのURIを次のように保存します。

_Session["SummaryURI"] = Request.Url.AbsoluteUri;
_

そして次のページで私はそれを次のように取得します:

_string url = Session["SummaryURI"].ToString();

url = url.Replace("static=false", "static=true");
//MessageLabel.Text = url;

//CREATE THE NEW FILE
WebRequest req = WebRequest.Create(url);
WebResponse res = req.GetResponse();
_

req.GetResponse()の部分で、エラーが発生します(_401 Unauthorized_)。

これを許可するには、IISで何かを構成する必要がありますか?

ファイルのパーミッションなどを編集する必要がありますか?

ご協力いただきありがとうございます

ちなみに、これは私のローカルIISでは正常に機能しますが、テストサーバーでは機能しません。

14
Daniel

現在のところ、IIS設定にアクセスできないため、Anonymous Authenticationを有効にできませんでした。これは、Cyber​​nateの回答が機能しなかった理由である可能性が非常に高いです。ただし、より簡単な方法で機能しました。WebRequestを使用する代わりに、Server.Executeでも同じことができることがわかりました。以下は私の新しいソリューションです。

string strHTML = String.Empty;
using (var sw = new StringWriter())
{
    Server.Execute([path-to-local-aspx], sw);
    strHTML = sw.ToString();
}

string relativeReportPath = [relative-path-to-new-html-file];

using (StreamWriter writer = File.CreateText(Server.MapPath(relativeReportPath)))
{
    writer.WriteLine(strHTML);
    MessageLabel.Text = "Your report is ready. Click Close to close the window.";
}
3
Daniel

匿名認証を有効にできない場合は、これをWebRequestに追加してみてください。

req.UseDefaultCredentials = true;
req.PreAuthenticate = true;
req.Credentials = CredentialCache.DefaultCredentials;
24
Daniel

問題は、テストでの認証IISサーバーです。2つのオプション:

1)テストでサイトの「匿名認証」を有効にするIISサーバー。

2)(推奨)テストサーバーへのリクエストを行う前に、テストサーバーに対して認証できる正しいユーザー名/パスワード/ドメイン情報を含む以下のコードテンプレートを使用します。

System.Net.NetworkCredential netCredential = 
        new System.Net.NetworkCredential("<USER_NAME>", "<PASSWORD>", "<DOMAIN>");
req.Credentials = netCredential;
10
Chandu

多分プロキシはあなたを悩ませます。無効にする方法については、こちらをご覧ください: WebRequestからプロキシを削除し、DefaultWebProxyをそのままにしておく方法

また、エンドポイントのスラッシュが欠落している可能性があります。

Endpoint = $"https://your.api.com/id=111/"; /* <-- attention to the trailing slash */
0
bside