RainerAtSpirit と margabit、どちらも正しいです、ありがとう。サーバー側の実装方法は次のとおりです。
WebApi
最初に、サーバーとのやり取りはすべてコントローラーを介して行われることに注意してください。
たとえば、URL が
http://localhost:61285/home/category2/subCategory22
(localhost の場合) の場合、サーバーは「home」という名前のコントローラーと、その中の「category2」という名前のアクションを検索しようとします。そのようなアクションがないため、404 エラーが発生します。
私が望んでいたのは、サーバーが「ホーム」コントローラーを呼び出すが、残りの URL をパラメーターとしてクライアントに送信することです。私の解決策は、コントローラーの名前の後にハッシュを追加して、URL が次のようになるようにすることhttp://localhost:61285/home/#/category2/subCategory22
でした。これが発生した場合、クライアントは 404 エラーなしでハッシュされた部分を処理します。
これが起こるために:
「web.config」に次を追加しました。
<customErrors mode="On" defaultRedirect="Error">
<error statusCode="404" redirect="Error" />
</customErrors>
次に、次のクラスを含む「ErrorController」という名前のコントローラーを作成します。
public class ErrorController : ApiController
{
[HttpGet, HttpPost, HttpPut, HttpDelete, HttpHead, HttpOptions, AcceptVerbs("PATCH"), AllowAnonymous]
public HttpResponseMessage Handle404()
{
string [] parts = Request.RequestUri.OriginalString.Split(new[] { '?' }, StringSplitOptions.RemoveEmptyEntries);
string parameters = parts[ 1 ].Replace("aspxerrorpath=","");
var response = Request.CreateResponse(HttpStatusCode.Redirect);
response.Headers.Location = new Uri(parts[0].Replace("Error","") + string.Format("#{0}", parameters));
return response;
}
}
何が起こるかというと、サーバーが上記のように関連するアクションのない URL を取得すると、それを次の形式でこのコントローラーにリダイレクトします:http://localhost:61285/Error?aspxerrorpath=home/category2/subCategory22
ご覧のとおり、これを操作してハッシュを追加し、不要な情報を削除しますhttp://localhost:61285/home/#/category2/subCategory22
:サーバーを「ホーム」コントローラーにリダイレクトします。
なぜ私がこれをすべて行うのか疑問に思われるかもしれません - その理由は、素晴らしいプラットフォームであるデュランダルがプッシュ状態を使用できるようにするためです。関連するコントローラー/アクションがないにもかかわらず、クライアントに送信します。Durandal はハッシュされた URL を取得しますが、ハッシュを自動的に削除し、最終的にユーザーにはハッシュのない URL が表示されますが、Durandal は必要なすべてのプッシュ状態機能を提供します。
エリオール