比如api.taobao.com這么一個固定的url
根據傳遞,比如引數cmd=order.create 就呼叫創建order.update就修改,order.delete就洗掉
一般他們是根據dns還是怎么做的,代碼實作一般需要如何做?
uj5u.com熱心網友回復:
地址不變,HTTPMETHOD 變即可增加用 HttpPost
修改用 HttpPut
修改區域用 HttpPatch
洗掉用 HttpDelete
即可。
uj5u.com熱心網友回復:
如果是普通的api/user/create
那么基本就是路由.
如果是這種api?cmd=order.create
有很大可能是反射.
通過api這個class去找order下的create方法...然后去接收post引數...
uj5u.com熱心網友回復:
對于webapi,這只是一個介面,引數就是cmd和其他附加的在這個介面你再來判斷cmd是什么
之后你用自己的工廠模式
甚至switch,if都行
uj5u.com熱心網友回復:
路由不管他用那種技術,統稱路由。你可以用nginx路由,你可以用mq路由,你可以用mvc路由,你可以用eventbus路由
uj5u.com熱心網友回復:
這里是net版,其他的路由俺們不提最起碼的,mvc 路由,也從來就沒人規定 一定得寫成{control}/{action}
為啥不能是cmd={contorl}.{action}
----------------------------------
葉秋大大可以一葉知秋。俺們程式員就只會用石頭砸核桃,不會用核桃砸石頭??不是工廠,不是反射。依舊還是路由
uj5u.com熱心網友回復:
都不是,他使用api作為容器,接受到的引數反射或者注入對應的業務方法。這只是一種設計模式而已。
如果是想做出來,autofact之類的ioc直接做就好了。
好奇怎么實作的我說的這個也開源,不過你可能要慢慢看一段時間。
uj5u.com熱心網友回復:
這個可能是底層有個esb總線在做處理,但webapi我們應該也可以實作route匹配策略的uj5u.com熱心網友回復:
一語驚醒夢中人

uj5u.com熱心網友回復:
http://nancyfx.org/其實看看這樣的第三方框架能更明白webapi做了什么。
uj5u.com熱心網友回復:
默認提供的路由cmd={contorl}/{action}可以但如果要cmd={contorl}.{action}的話,好像不行,可能要重寫
uj5u.com熱心網友回復:
一眼望去,樓上都是大佬,專家,總結大佬的建議應該是需要重寫路由,然后根據自定義路由判斷了uj5u.com熱心網友回復:
大佬,api好像沒有action,而且路由不能用 點 分割,不知道有什么方式可以
uj5u.com熱心網友回復:
遵循 HTTP 協議即可
uj5u.com熱心網友回復:
我也不想多廢啥腦漿,隨手建個api專案,隨手在FilterConfig.cs轉向定義
//
// 摘要:
// 映射應用程式的特性定義路由。
//
// 引數:
// configuration:
// 服務器配置。
//
// constraintResolver:
// 約束決議程式。
public static void MapHttpAttributeRoutes(this HttpConfiguration configuration, IInlineConstraintResolver constraintResolver);
//
// 摘要:
// 映射應用程式的特性定義路由。
//
// 引數:
// configuration:
// 服務器配置。
//
// directRouteProvider:
// 要用于發現和生成路由的 System.Web.Http.Routing.IDirectRouteProvider。
public static void MapHttpAttributeRoutes(this HttpConfiguration configuration, IDirectRouteProvider directRouteProvider);
//
// 摘要:
// 映射應用程式的特性定義路由。
//
// 引數:
// configuration:
// 服務器配置。
//
// constraintResolver:
// 用于決議行內約束的 System.Web.Http.Routing.IInlineConstraintResolver。
//
// directRouteProvider:
// 要用于發現和生成路由的 System.Web.Http.Routing.IDirectRouteProvider。
public static void MapHttpAttributeRoutes(this HttpConfiguration configuration, IInlineConstraintResolver constraintResolver, IDirectRouteProvider directRouteProvider);
看見那么多多載了么?
constraintResolver:
// 用于決議行內約束的 System.Web.Http.Routing.IInlineConstraintResolver。
//
// directRouteProvider:
// 要用于發現和生成路由的 System.Web.Http.Routing.IDirectRouteProvider。
基本上問題就解決了
不過,對我個人來說,我不在這里玩。因為現在的專案前面還有一層nginx,大多數情況下這玩意在nginx上玩,畢竟我在這里早說過了,現在的專案早就不是一個東西打天下的年代了,一個nginx代理所有的php,java,perl,cgi,net,python,go--你們各自使用各自的特性,并不需要專門去更改路由,外面那個nginx來給你們捏起來
uj5u.com熱心網友回復:
但是我想根據引數去尋找具體的一個實作介面uj5u.com熱心網友回復:
IInlineConstraintResolverIDirectRouteProvider
實作他們就行
uj5u.com熱心網友回復:
普通的就根據引數判斷,高級一點的就設定路由規則uj5u.com熱心網友回復:
路由用.好像不行吧是不是可以用屬性實作,order是物件,create是屬性,屬性實作里寫redirect(處理頁面)
uj5u.com熱心網友回復:
請求 型別不一樣可以的轉載請註明出處,本文鏈接:https://www.uj5u.com/net/117638.html
標籤:ASP.NET
上一篇:使用layui 前臺上傳excel檔案,會把excel自動轉換成json ,我的問題是把轉換完的json通過$.ajax() 提交給后臺,如何實作
下一篇:開始除錯按鈕變灰,不能使用
