以前にアクセスしたローカルの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では正常に機能しますが、テストサーバーでは機能しません。
現在のところ、IIS設定にアクセスできないため、Anonymous Authentication
を有効にできませんでした。これは、Cybernateの回答が機能しなかった理由である可能性が非常に高いです。ただし、より簡単な方法で機能しました。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.";
}
匿名認証を有効にできない場合は、これをWebRequestに追加してみてください。
req.UseDefaultCredentials = true;
req.PreAuthenticate = true;
req.Credentials = CredentialCache.DefaultCredentials;
問題は、テストでの認証IISサーバーです。2つのオプション:
1)テストでサイトの「匿名認証」を有効にするIISサーバー。
2)(推奨)テストサーバーへのリクエストを行う前に、テストサーバーに対して認証できる正しいユーザー名/パスワード/ドメイン情報を含む以下のコードテンプレートを使用します。
System.Net.NetworkCredential netCredential =
new System.Net.NetworkCredential("<USER_NAME>", "<PASSWORD>", "<DOMAIN>");
req.Credentials = netCredential;
多分プロキシはあなたを悩ませます。無効にする方法については、こちらをご覧ください: WebRequestからプロキシを削除し、DefaultWebProxyをそのままにしておく方法
また、エンドポイントのスラッシュが欠落している可能性があります。
Endpoint = $"https://your.api.com/id=111/"; /* <-- attention to the trailing slash */