具有不同签名的控制器操作方法

发布于 2024-08-27 20:37:56 字数 421 浏览 9 评论 0原文

我正在尝试获取 files/id 格式的网址。我猜我的控制器中应该有两种 Index 方法,一种带有参数,另一种不带参数。但我在下面的浏览器中收到此错误消息。

无论如何,这是我的控制器方法:

public ActionResult Index()
{
    return Content("Index ");
}

public ActionResult Index(int id)
{
    File file = fileRepository.GetFile(id);
    if (file == null) return Content("Not Found");
    else return Content(file.FileID.ToString());
}

更新:添加路线完成。感谢杰夫

I am trying to get my URLs in files/id format. I am guessing I should have two Index methods in my controller, one with a parameter and one with not. But I get this error message in browser below.

Anyway here is my controller methods:

public ActionResult Index()
{
    return Content("Index ");
}

public ActionResult Index(int id)
{
    File file = fileRepository.GetFile(id);
    if (file == null) return Content("Not Found");
    else return Content(file.FileID.ToString());
}

Update: Done with adding a route. Thanks to Jeff

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

找回味觉 2024-09-03 20:37:57

如果参数不同,您只能重载操作在动词中,不仅仅是论证。在您的情况下,您需要一个带有可为空 ID 参数的操作,如下所示:

public ActionResult Index(int? id){ 
    if( id.HasValue ){
        File file = fileRepository.GetFile(id.Value);
        if (file == null) return Content("Not Found");
            return Content(file.FileID.ToString());

    } else {
        return Content("Index ");
    }
}

您还应该阅读 Phil Haack 的 方法如何成为操作

You can only overload Actions if they differ in arguments and in Verb, not just arguments. In your case you'll want to have one action with a nullable ID parameter like so:

public ActionResult Index(int? id){ 
    if( id.HasValue ){
        File file = fileRepository.GetFile(id.Value);
        if (file == null) return Content("Not Found");
            return Content(file.FileID.ToString());

    } else {
        return Content("Index ");
    }
}

You should also read Phil Haack's How a Method Becomes an Action.

柠檬色的秋千 2024-09-03 20:37:57

要使用 files/id URL 格式,请删除无参数 Index 重载,并首先添加此自定义路由,以便在默认路由之前对其进行评估:

routes.MapRoute(
        "Files",
        "Files/{id}",
        new { controller = "Files", action = "Index" }      
    );

请参阅 ASP.NET MVC 路由概述 了解将 URL 映射到控制器方法的基础知识和 ScottGu 的优秀 URL 路由 文章,其中有几个与您想要执行的操作非常接近的示例。

To use the files/id URL format, remove the parameterless Index overload, and add this custom route first so it's evaluated before the default route:

routes.MapRoute(
        "Files",
        "Files/{id}",
        new { controller = "Files", action = "Index" }      
    );

See ASP.NET MVC Routing Overview for the basics of mapping URLs to controller methods and ScottGu's excellent URL Routing article, which has several examples very close to what you want to do.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文