2014-07-24 75 views
0

基本上,我想路由到一個靜態頁面這樣的:如何路由與出改變URL路徑的靜態頁面在asp.net MVC3

http://127.0.0.1/mypage

=路線=>

一個靜態頁面在我的網站文件夾也許http://127.0.0.1/static/mypage.html

我曾嘗試:

添加路由角色:

routes.MapRoute("StaticPage", "{pagename}", new { controller = "Common", action = "StaticPage" });

添加在​​一個動作:

public ActionResult StaticPage(string pagename) 
{ 
    return Redirect("/static/" + pagename + ".html"); 
} 

但它會改變URL並造成兩次請求,是否有任何其他方式(針對無IFRAME)保持的網址是什麼?

回答

0

將文件寫入到響應,然後返回一個EmptyResult

public ActionResult StaticPage(string pagename) 
{ 
    Response.WriteFile(Url.Content(string.Format("/static/{0}.html", pagename))); 
    return new EmptyResult(); 
} 
+0

但是頁面中的所有資源都會失效,因爲路徑現在實際上是視圖的路徑。 – jarvanJiang

+0

那麼你希望它是'http:// www.example.com/mypage'還是'http:// www.example.com/static/mypage.html'?如果是後者,請使用您的原始解決方案。 –

0

你可以簡單地擁有你的控制器返回所需的文件的內容如下所示:

public ActionResult StaticPage(String pageName) { 
    return Content(GetFileContents("/static/" + pageName + ".html")); 
} 
public static string GetFileContents(string FileName) 
{ 
    StreamReader sr = null; 
    string FileContents = null; 

    try 
    { 
     FileStream fs = new FileStream(FileName, FileMode.Open, 
            FileAccess.Read); 
     sr = new StreamReader(fs); 
     FileContents = sr.ReadToEnd(); 
    } 
    finally 
    { 
     if(sr != null) 
     sr.Close(); 
    } 

    return FileContents; 
} 
+0

但是頁面中的所有資源都會失效,因爲路徑現在實際上是視圖的路徑。 – jarvanJiang