「Web サービス」へのクロスドメイン呼び出しを行おうとしています (クエリ文字列値に基づいて XML を返す単純なサイトであるためです) が、運がありません。リクエストを行うたびに、(401) Unauthorized
エラーが発生します。ただし、ブラウザにリンクを配置し、クエリ文字列を変更して結果を取得することはできるので、コンピュータからサイトにアクセスできる必要があります。以下は私が使用しようとしているコードです。誰か提案を提供できますか?
Web サービスへの呼び出しは、ページのビューからの Ajax 呼び出しで開始されます。そのコードを以下に貼り付けます。
function GetProgramDetails() {
var searchItem = $('.searchbox').val();
var request = $.ajax({
type: 'POST',
url: '@Url.Action("compSearch", "Home")',
data:
{
searchFilter: searchItem,
url: location.protocol + '//' + location.host
},
dataType: 'html',
success: function (data) {
console.log(data);
alert(data);
},
error: function (data) {
console.log(data);
alert("Unable to process your resquest at this time.");
}
});
}
これにより、以下のビューのコントローラーが呼び出されます。
[HttpPost]
public string compSearch(string searchFilter, string url)
{
string results = string.Empty;
string URL =
"http://quahildy01/xRMDRMA02/xrmservices/2011/OrganizationData.svc/AccountSet?$select=AccountId,Name,neu_UniqueId&$filter=startswith(Name,'" +
searchFilter + "')";
try
{
WebRequest myWebRequest = WebRequest.Create(URL);
myWebRequest.Headers.Add("Access-Control-Allow-Origin", url);
WebResponse myWebResponse = myWebRequest.GetResponse();
Stream myFileStreamResult = myWebResponse.GetResponseStream();
Encoding encoder = System.Text.Encoding.GetEncoding("utf-8");
StreamReader readStream = new StreamReader(myFileStreamResult, encoder);
results = readStream.ReadToEnd();
}
catch (Exception ex)
{
results = ex.InnerException.ToString();
}
return results;
}