URL не попадает в контроллер маршрутизации на основе атрибутов MVC - PullRequest
0 голосов
/ 16 мая 2019

Я использую маршрутизацию на основе атрибутов в приложении MVC.Мой код -

[RouteArea("MasterData")]
[RoutePrefix("BrandFacilityShipmentMaintenance")]
public class BrandFacilityShipmentMaintenanceController : Controller
{
    [Route("Index")]
    public ActionResult Index()
    {

    }
}

Я пытаюсь перейти по URL с параметрами variabale, такими как

/MasterData/BrandFacilityShipmentMaintenance/Index
/MasterData/BrandFacilityShipmentMaintenance/Index/1156?pid=1120
/MasterData/BrandFacilityShipmentMaintenance/Index/1156?pid=1120&fname=Brand+Facility+Shipment+Maintenanca
/MasterData/BrandFacilityShipmentMaintenance/Index/1156?pid=1120&fname=Brand+Facility+Shipment+Maintenanca&isReffered=false

Но он говорит, что ресурс не найден.Все эти URL обращаются к одному и тому же действию Index в обычной маршрутизации.Что я должен изменить, чтобы он работал в атрибутной маршрутизации.

AreaRegistration.cs -

public override void RegisterArea(AreaRegistrationContext context) 
{
    context.Routes.MapMvcAttributeRoutes();
    context.MapRoute(
        "Masterdata_default",
        "Masterdata/{controller}/{action}/{id}",
        new { action = "Index", id = UrlParameter.Optional }
    );
}

Ответы [ 2 ]

1 голос
/ 16 мая 2019

Параметры url сопоставляются с параметрами метода, поэтому вам необходимо указать их в подписи вашего метода.

public string Index(int id, int? pid)  { ... }

С здесь

РЕДАКТИРОВАТЬ: ВыВы также можете получить доступ к параметрам строки запроса следующим образом:

public ActionResult Index(int id)
{ 
    string param1 = this.Request.QueryString["pid"];
    // parse int or whatever
}

EDIT2: Это также является хорошим чтением

0 голосов
/ 16 мая 2019

Вы, вероятно, комбинируете маршрутизацию на основе соглашений с маршрутизацией атрибутов, и вам следует зарегистрировать свои области после сопоставления маршрутов атрибутов.

Добавить регистрацию области в Application_Start() после RouteConfig.RegisterRoutes(RouteTable.Routes)

AreaRegistration.RegisterAllAreas();

Попробуйте использовать именованный параметр "AreaPrefix" в RouteArea

[RouteArea("MasterData", AreaPrefix = "MasterData")]

Это должно работать.

Также вы можете удалить атрибут RouteArea и использовать только RoutePrefix следующим образом

[RoutePrefix("MasterData/BrandFacilityShipmentMaintenance")]
...