如何将所有操作映射到C#类而不是ASP?

时间:2013-05-10 16:07:29

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

我希望将所有网址映射到/ Home / User或/ Home / About或/ Home / Register或...到c#页面如下:

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

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

我希望当用户发送/ Home / User请求时...用户类的Call Run功能并向用户显示返回值。我怎么能在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并且为此我不需要使用asp页面来呈现html,我只需要调用一些将JSON返回给客户端的函数。

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

1 个答案:

答案 0 :(得分:1)

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

第一部分:将网址映射到网页。从某种意义上来说,这是 路由是什么。它将网址映射到操作,可以是页面,也可以是图片之类的资源,也可以是JSON数据之类的响应。请注意,它并不总是一个页面,通常是 url映射到资源

阅读网址路径文档here

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

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

我建议在这一点上阅读有关REST的内容。我建议这篇文章:How I explained REST to my wife


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

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

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

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

Page1.cshtml

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

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;
    }
} 

我强烈建议从Web Platform installer然后follow this tutorial获取所有先决条件,如visual studio和asp.net-mvc。