0

我想将 /Home/User 或 /Home/About 或 /Home/Register 或 ... 等所有 url 映射到 c# 页面,如下所示:

例如 User.cs 页面是这样的:

public class User
{
    public string run(UrlParameter id){
        return "Hello World";
    }
}

我想当用户发送请求 /Home/User .. 调用用户类的运行函数并向用户显示返回值。我如何在 ASP MVC 中做到这一点?

我可以通过更改 RouteConfig 中的路线来做到这一点吗?现在我的 MVC 路线当前是:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}

当我调用一些 url 程序时,在视图文件夹中运行一个 asp 页面,作为 c#.net 中 MVC 项目的默认设置。

更多解释:

我的客户端和服务器端程序之间有JSON协议。我想在客户端询问某些内容时返回字符串 JSON 并且为此我不需要用于呈现 html 的 asp 页面,我只需要调用一些将 JSON 返回给客户端的函数。

我怎么能用 MVC 做到这一点?

4

1 回答 1

1

我假设你的问题有两个部分。

第一部分:将 url 映射到页面。从某种意义上说,这就是路由。它将一个 url 映射到一个action,它可能是一个页面,也可能是一个像图片这样的资源,或者像 JSON 数据这样的响应。请注意,它并不总是一个页面,通常一个url 映射到一个 resource

在此处阅读 URL 路由文档:

routes.MapRoute(
        name: "Default",
        url: "/Page1",
        defaults: new { controller = "Home", action = "Page1", 
               id = UrlParameter.Optional }
);

在上面的示例中: fakedomain.com/Page1 将Page1在类上运行该方法HomeController,如果您没有在其中添加任何代码,它将在您的视图文件夹中搜索Page1.aspx或。Page1.cshtml

我建议此时阅读有关 REST 的信息。我推荐这篇文章:我如何向我的妻子解释 REST


第二部分:如何返回 JSON 数据。那么你使用WebApi。请参阅此处的文档

WebApi 允许您编写根据请求返回数据的控制器。因此,如果您的客户端发送 Ajax 请求并将接受标头设置为 application/json,WebApi 将返回 JSON。

它还遵循 asp.net-MVC 的控制器、路由和操作的典型系统。

因此,要返回代表产品的 JSON 数据,您将拥有一个如下所示的 ProductController:

public class ProductsController : ApiController
{

    Product[] products = new Product[] 
    { 
        new Product { Id = 1, Name = "Tomato Soup", 
                      Category = "Groceries", Price = 1 }, 
        new Product { Id = 2, Name = "Yo-yo", 
                      Category = "Toys", Price = 3.75M }, 
        new Product { Id = 3, Name = "Hammer", 
                      Category = "Hardware", Price = 16.99M } 
    };

    public IEnumerable<Product> GetAllProducts()
    {
        return products;
    }

    public Product GetProductById(int id)
    {
        var product = products.FirstOrDefault((p) => p.Id == id);
        if (product == null)
        {
            throw new HttpResponseException(HttpStatusCode.NotFound);
        }
        return product;
    }
} 

使用 asp.net-mvc4 和 WebApi 的默认路由设置,上述控制器将响应以下 URL

This would get all products
/api/products/
This would get call the GetProductById and return ONE product:
/api/products/put_id_here

我强烈建议从Web 平台安装程序中获取所有先决条件,如 Visual Studio 和 asp.net-mvc ,然后按照本教程进行操作。

于 2013-05-10T16:39:27.233 回答