2011-12-15 28 views
1

IIS 7.5を含むサーバーにデプロイされているMVC3アプリケーション(.net framework v4.0.30319)のjQueryオートコンプリートコントロールで "401 - Unauthorized"jQueryオートコンプリートスロー401 - MVC 3コントローラアクションメソッドの呼び出し中に不正なエラーが発生しました

コントローラ:(SearchSuggestController)

[HttpGet] 
    public JsonResult SuggestByEmployeeId(string Id) 
    { 
     var suggestions = from a in Context.Employees 
          where a.EmployeeId.Contains(Id) 
          select new 
          { 
           a.EmployeeId, 
           a.FirstName, 
           a.LastName 
          }; 
     return Json(suggestions, JsonRequestBehavior.AllowGet); 
    } 

jQueryの:(オートコンプリート)

$(function() { 
    $("#IDFilter").autocomplete({source: function (request, response) { 
      $.ajax({ 
       url: "/SearchSuggest/SuggestByEmployeeId", 
       type: "POST", 
       dataType: "json", 
       data: { Id: request.term }, 
       error: function (XMLHttpRequest, status, error) { 
        alert("Error status:(" + status + ") error:(" + error + ")"); 
       }, 
       success: function (data) { 
        response($.map(data, function (item) { 
         return { label: item.EmployeeId, value: item.EmployeeId,id: item.EmployeeId }; 
        })); 
       } 
      }); 
     }, 
     minLength: 3, 
     autoFocus: true, 
     select: function (event, ui) { 
      $("#IDFilter").val(ui.item.value); 
     } 
    });}); 

jQueryのURLを呼び出している:「/ SearchSug gest/SuggestByEmployeeId "つまりSearchSuggestコントローラの SuggestByEmployeeIdアクションです。

Search.cshtml:有効な社員が「IDFilter」に入力し、検索ボタンをクリックされた場合(ビュー)従業員のコントローラで

@using (Html.BeginForm("BasicSearch", "Employee")) 
{ 
@Html.Label("Employee Id:") 
@Html.TextBox("IDFilter") 
<input type="submit" value="Search" /> 
} 

BasicSearchアクションメソッドが正常に動作しています。

Visual Studio IDEでコードを実行すると、オートコンプリートが期待される結果を示しています。公開後、このコードをIIS 7.5に配布すると、401-Unauthorizedエラーが発生します。アプリケーションはIISの既定のWebサイトでホストされます。

ここで何が間違っているのでしょうか?

答えて

1

私は解決策があると思います。 IE8の開発者ツール

ホストサーバ上で

を使用してjQueryを掘り下げる

、オートコンプリートのXMLHttpRequestは、リクエストURL "http://localhost:80/SearchSuggest/SuggestByEmployeeId?Id=123"

を検索しようとしている。しかし、私のアプリケーションは、既定のWebサイトの下に「MyAppの」としてホストされているので、 URLは、したがって、私はこの変更後はオートコンプリートが期待をフェッチしているurl: "/MyApp/SearchSuggest/SuggestByEmployeeId"

にURLを更新した"http://localhost:80/MyApp/SearchSuggest/SuggestByEmployeeId?Id=123"

ようにする必要がありますエフェクト結果401エラーはなくなりました。

おそらくホスト環境では、私は新しいWebサイトをセットアップし、その下に自分のMVCアプリケーションをデプロイする必要があります。 この方法では、毎回jQueryでこの変更を行う必要はありません。

誰かがより良い解決策を持っている場合は、お勧めします。

1

あなたはアクションにAJAX POSTしていますが、あなたのアクションはGETだけを受け入れますか?

コントローラ(またはベースコントローラ)に[Authorize]属性がありますか?

+0

私の間違いとして、jQueryをAJAX GETに更新しました。 [Authorize]属性は、いずれのコントローラーにも適用されていません。問題は依然として続きます。 –

1

URLをハードコードするのではなく、相対パスの問題を回避するには、@ URL.Actionヘルパーを使用します。

だから、あなたの古いコード:url: "/SearchSuggest/SuggestByEmployeeId",
はなるはずです:url: '@Url.Action("SuggestByEmployeeId", "SearchSuggest")'

幸運!

関連する問題