iT邦幫忙

0

[筆記系列] 雜貨店筆記-在C#遇到一些的雜貨整理(2018/10/23更新)

//1.1 檔案傳遞用HttpPostedFileBase class
public void function01 (HttpPostedFileBase file){ ... }

//2.1 相容IE取檔案名稱
var fileName = Path.GetFileName(file.FileName)

//3.1 EF6比對時間用DbFunctions
var isExistenceFile = Db.MainOCImportLogs.Any(x => 
    DbFunctions.TruncateTime(x.ImportDate) == DbFunctions.TruncateTime(DateTime.Now));

//4.1 WebApi: App_Start/WebApiConfig.cs
config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "hagondas/{controller}/{period}",
            defaults: new { period = RouteParameter.Optional }
        );
//** 其中period要與Controller要吃的參數相同才會吃到 **
//4.1.1 WebApi:Controller(ex:DrawingController)
public int GetDrawing(int period)
{
    return period;
}
//** 其中period要與Controller要吃的參數相同才會吃到 **
4.1.2 WebApi: Controller && App_Start/WebApiConfig.cs 

public string Get01(string name)
{
    return name;
}

public int Get02(int id)
{
    return id;
}

public string Get03(string name, string id)
{
    return name + id;
}

//路由1
config.Routes.MapHttpRoute(
    name: "Get01",
    routeTemplate: "api/{controller}/test01/{name}",
    defaults: new { name = RouteParameter.Optional }
);

//路由2
config.Routes.MapHttpRoute(
    name: "Get02",
    routeTemplate: "api/{controller}/test02/{id}",
    defaults: new { id = RouteParameter.Optional }
);

//路由3
config.Routes.MapHttpRoute(
    name: "Get03",
    routeTemplate: "api/{controller}/{name}/{id}",
    defaults: new { test03 = RouteParameter.Optional, id = RouteParameter.Optional }
);
//**name:路由的名稱**
//**routeTemplate:路由URI範本**
//**default:定義參數**
//***********************************************************
在路由1中,先給他一個名稱叫做"Get01",在Controller裡面也有一個一樣名稱的方法,這樣的設計只是讓我們比較容易分辨這個Routing到底是做什麼用的、與那些Controller方法有關係,名稱並不絕對一定要與Controller方法相同。

路由URI範本描述了這個Web API對外的URI長什麼樣子,例如"api/{controller}/test01/{name}",翻譯一下就成為:"api/控制器名稱/test01/參數name",如果套用到瀏覽器的網址上就成為:"http://domain:port/api/控制器名稱/test01/參數name",這樣看起來就很簡單了吧!

最後就是定義參數,"RouteParameter.Optional"代表這個參數是可選用的,我們在呼叫Web API時不一定要送出這個參數,這也造就了路由3可以一個路由多個用途的原因!

我們來看看路由3,他的路由範本是"api/{controller}/{name}/{id}",且兩個參數都是可選用的,也就是不一定要傳入,所以可能的URI如下:

api/{controller}/{name}/{id}
api/{controller}/{name}
api/{controller}
//***********************************************************
//4.1.2.1 WebApi 可以改成 (ex:DrawingController)
[Route("api/drawing")]
[HttpGet]
public string Get(string name)
{
    return name;
}

[Route("api/drawing/test01/{name}")]
[HttpGet]
public string Get01(string name)
{
    return name;
}

[Route("api/drawing/test02/{id}")]
[HttpGet]
public int Get02(int id)
{
    return id;
}

[Route("api/drawing/{name}/{id}")]
[HttpGet]
public string Get03(string name, string id)
{
    return name + id;
}

尚未有邦友留言

立即登入留言