RainerAtSpirit和margabit,你們都對,謝謝。下面是我如何實現服務器端:
首先我應該注意,所有與服務器的交互都是通過WebApi
控制器完成的。例如,如果URL是: http://localhost:61285/home/category2/subCategory22
(對於本地主機),服務器試圖尋找一個名爲'home'的控制器,並在其中調用'category2'。由於沒有這樣的動作,我得到了404錯誤。
我想要的是服務器將調用'home'控制器,但將URL的其餘部分作爲參數發送給客戶端。我的解決方案是在控制器名稱後添加散列,以便URL看起來像這樣:http://localhost:61285/home/#/category2/subCategory22
。如果發生這種情況,那麼客戶端將會處理沒有404錯誤的哈希部分。
要發生這種情況:
我將以下內容添加到'網頁。配置':
<的customErrors模式= 「開」 的defaultRedirect = 「錯誤」>
<錯誤的StatusCode = 「404」 重定向= 「錯誤」/>
< /的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是一個很棒的平臺,它使我能夠使用推送狀態,但爲了實現這一點,我必須在服務器上進行非哈希處理儘管沒有相關的控制器/操作,但將其傳遞給客戶端; Durandal會得到一個哈希URL,但會自動刪除哈希,而用戶最終會看到一個無哈希的URL,而Durandal提供所有必要的推送狀態功能。
Elior
看起來你還沒有配置服務器端的處理程序對於http://本地主機:61285/Flickr的? – RainerAtSpirit