2014-10-31 54 views
0

據我所知,MVC模型中的網址是基於控制器的。但我面臨這個問題,我不能環繞它我的頭:MVC動態URL

  • 如果我設計的飲料網址是什麼,我必須使用不同的URL爲每個品牌。例如:beverage.com/pepsi, beverage.com/cocacola, beverage.com/sprit, beverage.com/7up。這些網址都會導致一個叫做productdescription的頁面,唯一的區別是描述(圖片,配料,價格等)

  • 那麼這個任務有沒有高效的方式?我不想爲每個產品創建新的控制器!

回答

1

假設您的公共控制器名稱爲ProductController和方法名稱是Description。 現在RouteConfig.cs如下文所述,您可以添加路線:

routes.MapRoute(
    "PepsiRoute", 
    "Pepsi/{id}", 
    new { controller = "Product", action = "Description", id = UrlParameter.Optional }); 

routes.MapRoute(
    "CockRoute", 
    "Cock/{id}", 
    new { controller = "Product", action = "Description", id = UrlParameter.Optional }); 

注:上述路線應該默認路由之前。否則,你將面臨運行時異常The controller for path '{PATH}' could not be found.

更新:

對於多個品牌,如果你不想註冊爲具體的品牌,那麼你可以繪製路線的路線如下所述:

routes.MapRoute(
    "AllBrand", 
    "Product/{name}/{id}", 
    new { controller = "Home", action = "About", id = UrlParameter.Optional }); 

那麼你的網址是:

  • {}域/產品/百事可樂
  • {}域/產品/百事可樂/ 2
  • {}域/產品/公雞/ 14
  • {}域/產品/屌

    等等

+0

感謝答案!只是爲了澄清:所以如果有更多的品牌,我將不得不添加更多的地圖路線? – f855a864 2014-10-31 08:42:28

+0

我現在無法測試,但它好像是我正在尋找的解決方案。感謝你的回答 ! – f855a864 2014-10-31 08:58:26

0

您正在尋找休息控制器。以下是具體步驟:

1,聲明你的休息servlet的web.xml中的連接(例如的Websphere):

<servlet> 
    <servlet-name>MyRestServlet</servlet-name> 
    <servlet-class>com.ibm.websphere.jaxrs.server.IBMRestServlet</servlet-class> 
    <init-param> 
     <param-name>javax.ws.rs.Application</param-name> 
     <param-value>mipackage.MyRestServlet</param-value> 
    </init-param> 
    <init-param> 
     <param-name>requestProcessorAttribute</param-name> 
     <param-value>2</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>MyRestServlet</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

2,落實RestServlet

import java.util.HashSet; 
import java.util.Set; 
import javax.ws.rs.core.Application; 

public class RestServlet extends Application { 

    @Override 
    public Set<Class<?>> getClasses() { 
     Set<Class<?>> classes = new HashSet<Class<?>>(); 
     classes.add(BeverageController.class); 
     return classes; 
    } 

}  

3 - 實現你休息控制器:

import javax.enterprise.context.ApplicationScoped; 
import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.PathParam; 

@Path("/{beverage}") 
@ApplicationScoped 
public class BeverageController { 
    { 
     @GET 
     public String getBeverage(@PathParam("beverage") String beverage){ 
      //fetch order 
     } 
    } 
}