diff --git a/core/lib/Drupal/Core/Url.php b/core/lib/Drupal/Core/Url.php
index 999f447..9ad9ea1 100644
--- a/core/lib/Drupal/Core/Url.php
+++ b/core/lib/Drupal/Core/Url.php
@@ -196,9 +196,15 @@ public static function fromRouteMatch(RouteMatchInterface $route_match) {
    * base://robots.txt. For URLs that have Drupal routes (that is, most pages
    * generated by Drupal), use Url::fromRoute().
    *
+   * For resolving URLs to an entity, you may use the
+   * entity://{entity_type}/{entity_id} scheme. For example entity://node/1
+   * would resolve to the entity.node.canonical route with a node parameter of
+   * one.
+   *
    * @param string $uri
    *   The URI of the external resource including the scheme. For Drupal paths
    *   that are not handled by the routing system, use base:// for the scheme.
+   *   For entity URLs you may use entity://{entity_type}/{entity_id}
    * @param array $options
    *   (optional) An associative array of additional URL options, with the
    *   following elements:
@@ -225,9 +231,16 @@ public static function fromRouteMatch(RouteMatchInterface $route_match) {
    * @see static::fromRoute()
    */
   public static function fromUri($uri, $options = array()) {
-    if (!parse_url($uri, PHP_URL_SCHEME)) {
+    if (!($scheme = parse_url($uri, PHP_URL_SCHEME))) {
       throw new \InvalidArgumentException(String::format('The URI "@uri" is invalid. You must use a valid URI scheme. Use base:// for a path, e.g., to a Drupal file that needs the base path. Do not use this for internal paths controlled by Drupal.', ['@uri' => $uri]));
     }
+    if ($scheme == 'entity') {
+      $entity_path = substr($uri, 9);
+      list($entity_type_id, $entity_id) = explode('/', $entity_path);
+      return new static("entity.$entity_type_id.canonical", [
+        $entity_type_id => $entity_id,
+      ]);
+    }
 
     $url = new static($uri, array(), $options);
     $url->setUnrouted();
diff --git a/core/tests/Drupal/Tests/Core/UrlTest.php b/core/tests/Drupal/Tests/Core/UrlTest.php
index a93226a..ddfca7e 100644
--- a/core/tests/Drupal/Tests/Core/UrlTest.php
+++ b/core/tests/Drupal/Tests/Core/UrlTest.php
@@ -51,6 +51,13 @@ class UrlTest extends UnitTestCase {
   protected $map;
 
   /**
+   * The entity storage.
+   *
+   * @var \Drupal\Core\Entity\EntityStorageInterface|\PHPUnit_Framework_MockObject_MockObject
+   */
+  protected $entityStorage;
+
+  /**
    * {@inheritdoc}
    */
   protected function setUp() {
@@ -444,6 +451,18 @@ public function accessProvider() {
     );
   }
 
+  /**
+   * Tests the fromUri() method with an entity:// URI.
+   *
+   * @covers ::fromUri
+   */
+  public function testEntityUris() {
+    $uri = 'entity://test_entity/1';
+    $url = Url::fromUri($uri);
+    $this->assertSame('entity.test_entity.canonical', $url->getRouteName());
+    $this->assertEquals(['test_entity' => '1'], $url->getRouteParameters());
+  }
+
 }
 
 class TestUrl extends Url {
