URL yang saya coba biarkan berfungsi adalah dengan gaya: http://somedomain.com/api/people/staff.33311 (seperti situs seperti LAST.FM mengizinkan semua jenis tanda di url RESTFul & WebPage mereka , misalnya " http://www.last.fm/artist/psy'aviah " adalah url valid untuk LAST.FM).
Apa yang berhasil adalah skenario berikut: - http://somedomain.com/api/people/ - yang mengembalikan semua orang - http://somedomain.com/api/people/staff33311 - akan berfungsi juga, tetapi bukan itu yang saya ' m setelah saya ingin url menerima "titik", seperti contoh di bawah - http://somedomain.com/api/people/staff.33311 - tetapi ini memberi saya
HTTP Error 404.0 - Not Found
The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.
Saya telah menyiapkan hal-hal berikut:
Pengontrol "PeopleController"
public IEnumerable<Person> GetAllPeople() { return _people; } public IHttpActionResult GetPerson(string id) { var person = _people.FirstOrDefault(p => p.Id.ToLower().Equals(id.ToLower())); if (person == null) return NotFound(); return Ok(person); }
WebApiConfig.cs
public static void Register(HttpConfiguration config) { // Web API configuration and services // Web API routes config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); }
Saya sudah mencoba mengikuti semua tip dari posting blog ini http://www.hanselman.com/blog/ExperimentsInWackinessAllowingPercentsAnglebracketsAndOtherNaughtyThingsInTheASPNETIISRequestURL.aspx tetapi masih tidak berfungsi .. Saya juga merasa ini cukup membosankan dan saya ingin tahu apakah tidak ada yang lain, cara yang lebih baik dan lebih aman.
Kami memiliki Id kami secara internal seperti ini, jadi kami harus menemukan solusi untuk menyesuaikan titik dengan satu atau lain cara, lebih disukai dalam gaya "." tapi saya terbuka untuk saran alternatif untuk url jika perlu ...
sumber
Jawaban:
Pengaturan berikut di
web.config
file Anda akan memperbaiki masalah Anda:sumber
Sufiks URL dengan garis miring misalnya,
http://somedomain.com/api/people/staff.33311/
bukanhttp://somedomain.com/api/people/staff.33311
.sumber
google.com/my query goes here/
vsgoogle.com/subDomain my query goes here
.Saya telah menemukan bahwa menambahkan yang berikut sebelum standar
ExtensionlessUrlHandler
memecahkan masalah bagi saya:Saya tidak berpikir nama sebenarnya terlalu penting kecuali mungkin membantu jika IDE Anda (Visual Studio dalam kasus saya) mengelola konfigurasi situs Anda.
H / T ke https://stackoverflow.com/a/15802305/264628
sumber
Saya tidak tahu apa yang sebenarnya saya lakukan, tetapi setelah sedikit bermain dengan jawaban sebelumnya, saya menemukan solusi lain yang mungkin lebih tepat:
sumber
<add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="managedHandler" />
Saya menemukan bahwa saya perlu melakukan lebih dari sekadar menyetel
runAllManagedModulesForAllRequests
atribut ketrue
. Saya juga harus memastikan bahwa penangan URL tanpa ekstensi telah dikonfigurasi untuk melihat semua jalur. Selain itu, ada satu lagi pengaturan konfigurasi bonus yang dapat Anda tambahkan yang akan membantu dalam beberapa kasus. Ini adalah Web.config saya:Catatan, khususnya, bahwa
ExtensionlessUrlHandler-Integrated-4.0
memiliki nyapath
set atribut*
sebagai lawan*.
(misalnya).sumber
path="*."
. Hanya penasaran, apa alasan orang mengaturnyapath="*."
?path="*"
dan mengalami masalah karena kami menghosting situs dokumentasi berdampingan dengan WebAPI kami dan situs tersebut memiliki masalah dengan .jpg, .png, dan file lain dengan ekstensi.<modules runAllManagedModulesForAllRequests="true" />
? Itu harus membuat NET menangani file-file statis tersebut.Saya terjebak dalam situasi ini tetapi menambahkan
/
di akhir URL tidak terlihat bersih bagi saya.jadi tambahkan saja di bawah ini di tag web.config
handlers
dan Anda akan baik-baik saja.sumber
Saya menemukan bahwa kedua cara berfungsi untuk saya: baik pengaturan runAllManagedModulesForAllRequests ke true atau tambahkan ExtentionlessUrlHandler sebagai berikut. Akhirnya saya memilih untuk menambahkan extensionUrLHandler karena runAllManagedModulesForAllRequests memang memiliki dampak kinerja ke situs.
sumber
Saya akan menggunakan ini di file Web.config:
sebelum standar "ExtensionlessUrlHandler".
Misalnya dalam kasus saya, saya taruh di sini:
Jadi Anda memaksa URL dengan pola seperti itu untuk dikelola oleh Anda, alih-alih pengelolaan standar sebagai file dalam pohon direktori aplikasi.
sumber
Saya menghadapi masalah yang sama dan keadaan saya di mana saya tidak seharusnya bermain dengan IIS dan pengaturan terkait konfigurasi situs web. Jadi saya harus membuatnya berfungsi dengan membuat perubahan hanya pada level kode.
Poin sederhananya adalah bahwa kasus paling umum di mana Anda akan berakhir memiliki karakter titik di URL adalah ketika Anda mendapatkan beberapa masukan dari pengguna dan meneruskannya sebagai string kueri atau fragmen url untuk meneruskan beberapa argumen ke parameter dalam metode tindakan pengontrol Anda.
Lihat URL di bawah ini di mana pengguna memasukkan id penggunanya untuk mendapatkan detail pribadinya:
Karena Anda hanya perlu mengambil beberapa data dari server, kami menggunakan
GET
verb http . Saat menggunakanGET
panggilan, parameter input apa pun hanya dapat diteruskan di fragmen URL.Jadi untuk mengatasi masalah saya, saya mengubah verba http tindakan saya menjadi
POST
.POST
Kata kerja http memiliki fasilitas untuk meneruskan input pengguna atau non-pengguna dalam tubuh juga. Jadi saya membuat data JSON dan meneruskannya ke badanPOST
permintaan http :Ubah definisi metode Anda seperti di bawah ini:
Catatan : Lebih lanjut tentang kapan menggunakan
GET
kata kerja dan kapan menggunakanPOST
kata kerja di sini .sumber