【问题标题】:Post from external site to MVC controller that has typed parameters从外部站点发布到具有类型参数的 MVC 控制器
【发布时间】:2011-08-15 17:23:14
【问题描述】:

我是 MVC 新手,所以我一直在为问题的标题而苦苦挣扎——不确定是否有任何内容已经涵盖了我想做的事情。

假设我有一个控制器:FooController。它处理一组视图,所有这些视图都做相同的基本事情,但出于各种原因使用不同的模型。所以我为每个模型创建了一个动作,效果很好:

[HttpPost]
public ActionResult Bar(Type1 t);
[HttpPost]
public ActionResult Bar(Type2 t);

等等……

我想要完成的(如果可能的话)是创建一个可以接受来自 3rd 方网站的 POST 的操作(除了本地键入的视图),我似乎无法弄清楚如何接受没有 MVC 抛出异常的数据:

当前对控制器类型“FooController”的操作“Bar”的请求在以下操作方法之间不明确:

它列出了上述动作。

我尝试了几件事:

  • 创建了一个方法 Bar(ExternalSiteType t) - 异常
  • 创建了一个方法 Bar(ExternalSiteParam1 p, ExternalSiteParam2 p2) - 异常
  • 已注释掉其他操作 - 上述两种方法均成功

任何想法如何让它工作?

编辑:路线示例

/Foo/Bar/Type1

/Foo/Bar/Type2

/Foo/Bar/ExternalSite

【问题讨论】:

  • 你能发布示例路由值(获取控制器的 url 地址)吗?
  • 两个动作方法的动作名称不能相同。

标签: asp.net-mvc asp.net-mvc-routing


【解决方案1】:

我不认为

[HttpPost]
public ActionResult Bar(Type1 t);
[HttpPost]
public ActionResult Bar(Type2 t);

完全可以工作,即使它来自同一个站点。除非它们使用不同的 Http 动词([HttpGet],[HttpPost] 等),否则不能有两个具有相同名称的操作。

最好的办法是为外部站点创建一个具有不同名称的操作,将传入的信息转换为Type1,然后重定向到Bar(Type1 t)。请参阅ASP.NET MVC Redirect with model,了解可以重定向和保留复杂对象的不同方式。

【讨论】:

  • 嗯。我想那会解释它。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-06
  • 2013-01-13
  • 1970-01-01
  • 1970-01-01
  • 2015-02-10
  • 1970-01-01
相关资源
最近更新 更多